我收到错误"无法在恢复期间执行unlisten"当我在连接字符串中使用Pooling = True时。
此错误发生在正在热备用上运行的复制/读取服务器上。
答案 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;
确实存在从一个命令泄漏到下一个命令的风险,但由于您处于只读模式,因此它不会影响您存储的数据。如果您正在使用它们,请小心处理游标,序列和临时表。从好的方面来看,它可能会使您的查询略微提速。