在恢复过程中无法执行unlisten

时间:2016-04-06 05:50:59

标签: npgsql

我收到错误"无法在恢复期间执行unlisten"当我在连接字符串中使用Pooling = True时。

此错误发生在正在热备用上运行的复制/读取服务器上。

1 个答案:

答案 0 :(得分:2)

版本3.2.7仍然会发生这种情况。应该可以在热备用数据库上运行SELECT查询,但是当使用Npgsql执行此操作时,我们得到

requirements = kivy, configparser, docutils

查看the source确认,在连接池时,Npgsql会在每个连接关闭后清除。其中一个清理操作是PostgresException 25006: cannot execute UNLISTEN during recovery at Npgsql.NpgsqlConnector.<DoReadMessage>d__157.MoveNext() ,它在热备用数据库上失败,因为它会影响状态。

幸运的是,我们可以设置connection string parameters来避免这种情况。正如原始问题所提到的,您可以禁用连接池。但是,在性能很重要的情况下,最好将UNLISTEN *添加到连接字符串中。

使用No Reset On Close=true;确实存在从一个命令泄漏到下一个命令的风险,但由于您处于只读模式,因此它不会影响您存储的数据。如果您正在使用它们,请小心处理游标,序列和临时表。从好的方面来看,它可能会使您的查询略微提速。

相关问题