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