1

我刚刚完成了 citusdb 教程。本地使用“psql”工作正常。但是当我尝试使用本机 postgres jdbc 执行相同的查询时,我得到了错误:

ERROR: ERROR: cannot execute PREPARE for a distributed query plan
Query = SELECT count(*) FROM customer_reviews

本地工作正常,

postgres=# SELECT count(*) FROM customer_reviews;

数数

589859(1排)

http://www.citusdata.com/downloads

4

4 回答 4

2

引用自 CitusDB 的 Wiki 上的常见错误页面。

此错误的最常见原因是使用 ODBC/JDBC 驱动程序的工具通常默认尝试使用 PREPARE 语句,目前 CitusDB 不支持该语句。这可以通过降级 JDBC 或 ODBC 协议版本来避免使用 PREPARE 语句很容易地解决。

对于 ODBC 驱动程序,根据您使用的特定驱动程序/工具,有时可以选择禁用 PREPARE 语句。或者,您可以将协议恢复到版本 7.2,这几乎总是可行的。

对于 JDBC 驱动程序,确切的步骤更多地取决于特定的驱动程序。但是,您几乎总是可以在驱动程序属性中或通过在连接字符串中指定它来将 protocolVersion 设置为 2。

于 2015-03-23T12:53:04.450 回答
1

PgJDBC 使用服务器端准备好的语句,看起来这个“citusdb”工具不支持它们。

尝试设置prepare threshold,这样PgJDBC就不会尝试prepare statements;见setPrepareThreshold。如果我没记错的话,您可以p repareThreshold=0改为在 JDBC URL 中设置它,但这会影响所有连接。

于 2014-05-28T06:33:55.517 回答
1

我也遇到了与 JDBC 集成的 CitusDB 相同的问题,但有一个解决方案。

你已经给出了带有连接字符串的协议版本,比如

connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres?protocolVersion=2");

目前 CitusDB JDBC 仅适用于协议版本 2。

我得到了结果,希望它能解决你的问题。

于 2015-07-14T20:59:14.080 回答
0

好吧,我正在使用使用 JDBC 的 RazorSQL 查询工具。但我更改为 ODBC,现在正在工作。

于 2014-05-28T20:56:04.330 回答