问题描述
我有一个网络核心应用程序,该应用程序通过PgPool-II集群连接到Postgresql服务器。效果很好,例如当我尝试使用pgpool sql命令(例如“ show pool_nodes”)时,这些命令似乎通过pgpool传递,而是进入一个抛出错误的Postgresql服务器(应该这样做)。
似乎Npgsql使用了“扩展查询协议”,该协议不适用于pgpool sql命令。他们需要“简单查询协议”。
是否可以在Npgsql中使用“简单查询协议”? 如果没有,是否还有其他方法可以通过Net Core发送PostgreSQL查询,而不使用Npgsql?
解决方法
否,当前没有一种方法可以通过PostgreSQL简单协议发送用户指定的查询。 Npgsql对某些内部命令(例如COMMIT)使用简单协议,但是面向用户的查询API始终使用扩展协议。
我想用PgPool-II提出这个问题,看来它们也应该拦截扩展协议消息-毕竟这是标准PostgreSQL协议的一部分(请在此处发布指向该问题的链接)。如果出于某种原因确实无法实现,则可以在Npgsql repo上打开一个问题,添加一些用于生成简单查询的API。
,我通过变通办法解决了这个问题。
从网络核心代码中,我调用psql命令应用程序,并让它处理对pgpool集群的请求。不是我想要的不错的解决方案,但是它可以工作。