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 のCommon Errorsページからの引用。

このエラーの最も一般的な原因は、ODBC/JDBC ドライバーを使用するツールが、通常、CitusDB で現在サポートされていない PREPARE ステートメントをデフォルトで使用しようとすることです。これは、JDBC または ODBC プロトコルのバージョンをダウングレードして PREPARE ステートメントを使用しないようにすることで、非常に簡単に解決できます。

ODBC ドライバーの場合、使用している特定のドライバー/ツールによっては、PREPARE ステートメントを無効にするオプションがある場合があります。または、プロトコルをバージョン 7.2 に戻すこともできます。これはほぼ常に可能です。

JDBC ドライバーの場合、正確な手順は特定のドライバーによって多少異なります。ただし、ほとんどの場合、ドライバーのプロパティで、または接続文字列で指定することにより、protocolVersion を 2 に設定できます。

于 2015-03-23T12:53:04.450 に答える
1

PgJDBC はサーバー側の準備済みステートメントを使用しますが、この「citusdb」ツールはそれらをサポートしていないようです。

PgJDBC がステートメントを準備しようとしないように、準備しきい値を設定してみてください。を参照してください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 に答える