pgpool 3.5.4 和 JDBC 的问题

Issue with pgpool 3.5.4 and JDBC

我有一个启用了内存缓存的 pgpool 3.5.4,我用它连接到 红移。

我写了两个简单的程序,一个在 Java (JDBC postgresql-9.4.1212.jre6.jar) 和 Python 中的另一个(使用 psycopg2 postgres 包)连接到 pgpool,并执行一个简单的查询 (例如:select * 来自客户限制 10;)我注意到 st运行ge 和 不同的行为。我还 运行 使用命令行工具进行查询 psql.

1) 将 JDBC 与启用缓存的 pgpool 一起使用我得到一个错误

2016-11-15 10:56:27:pid 31043:致命:后端抛出错误消息

2016-11-15 10:56:27:pid 31043:详细信息:退出当前会话,因为 来自后端的错误

2016-11-15 10:56:27:pid 31043:提示:后端错误:"portal "pgpool31043” 不存在

2) 将 JDBC 与禁用缓存的 pgpool 一起使用它有效

3) 使用带有缓存的 pgpool 的 psycopg2 或 psql 命令行 启用或禁用都有效

谁能帮我理解为什么只有 JDBC 不起作用?

有两种协议JDBC用于通信,简单查询协议和扩展查询协议。

然而,pgpool II 不能很好地与扩展查询协议一起工作。

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

到目前为止,我在两个客户身上测试了这个设置,在 postgres 和 redshift 之前使用 pgpool,它工作得很好。