2

我有一个启用了 memcache 的 pgpool 3.5.4,我用它来连接到 Redshift。

我写了两个简单的程序,一个用Java(JDBC postgresql-9.4.1212.jre6.jar)和另一个用Python(使用psycopg2 postgres包)连接到pgpool,并执行一个简单的查询(例如:select * from customer限制 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:提示:后端错误:“门户”pgpool31043“不存在”

2)在禁用缓存的情况下将 JDBC 与 pgpool 一起使用它可以工作

3)使用 psycopg2 或 psql 命令行与 pgpool 启用或禁用缓存它可以工作

有人可以帮我理解为什么只有 JDBC 不起作用吗?

4

1 回答 1

5

JDBC 使用两种协议进行通信,简单查询协议和扩展查询协议。

然而,pgpool II 不适用于扩展查询协议。

在 github ( https://github.com/pgjdbc/pgjdbc ) 的 pgjdbc 驱动程序文档中,有一个名为 preferQueryMode 的参数。要解决此问题,只需将 preferQueryMode 设置为 simple,问题就会消失。

到目前为止,我用两个客户测试了这个设置,在 postgres 和 redshift 前面使用 pgpool,它运行良好。

于 2017-01-12T16:37:59.500 回答