citusdb错误:错误:无法为分布式查询计划执行PREPARE

时间:2014-05-28 01:29:17

标签: postgresql citus

我刚刚完成了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 个答案:

答案 0 :(得分:2)

引用CitusDB的Wiki上的Common Errors页面。

  

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

     

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

     

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

答案 1 :(得分:1)

PgJDBC使用服务器端预处理语句,看起来这个“citusdb”工具不支持它们。

尝试setting the prepare threshold,因此PgJDBC不会尝试准备陈述;见setPrepareThreshold。如果我没记错的话,您可以在JDBC URL中使用p repareThreshold=0进行设置,但这会影响所有连接。

答案 2 :(得分:1)

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

您已为协议版本提供连接字符串,例如

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

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

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

答案 3 :(得分:0)

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