我有一个启用了memcache的pgpool 3.5.4,我使用它连接到
红移。
我写了两个简单的程序,一个是Java(JDBC
postgresql-9.4.1212.jre6.jar)和Python中的另一个(使用psycopg2
postgres包),它只连接到pgpool,并执行一个简单的查询
(例如:从客户限制10中选择*)我注意到奇怪的和
不同的行为。我还使用命令行工具运行查询
psql。
1)在启用了缓存的pgpool中使用JDBC时,我得到一个错误
2016-11-15 10:56:27:pid 31043:致命:后端抛出错误消息
201611-15:10:56:27:PID 31043:细节:退出当前会话,因为
来自后端的错误
2016-11-15 10:56:27:pid 31043:提示:后端错误:“门户”pgpool31043
“不存在”
2)使用禁用缓存的pgpool的JDBC
3)使用psycopg2或psql命令行和带有缓存的pgpool
启用或禁用它工作
有人能帮我理解为什么只有JDBC不工作吗?
最佳答案
JDBC用于通信的协议有两种:简单查询协议和扩展查询协议。
然而,pgpool II在使用扩展查询协议时并不能很好地工作。
在github(https://github.com/pgjdbc/pgjdbc)中pgjdbc驱动程序的文档中,有一个名为preferQueryMode的参数。要解决此问题,只需将preferQueryMode设置为simple,问题就会消失。
到目前为止,我已经和两个客户测试了这个设置,在postgres和redshift前面使用pgpool,它工作得很好。