2

memcache が有効になっている pgpool 3.5.4 があり、それを使用して Redshift に接続しています。

2 つの単純なプログラムを作成しました。1 つは Java (JDBC postgresql-9.4.1212.jre6.jar) で、もう 1 つは Python (psycopg2 postgres パッケージを使用) で、pgpool に接続するだけで単純なクエリを実行します (例: select * from customer) limit 10;) 奇妙で異なる動作に気付きました。また、コマンド ライン ツール psql を使用してクエリを実行しました。

1) キャッシングを有効にして pgpool で JDBC を使用すると、エラーが発生します

2016-11-15 10:56:27: pid 31043: 致命的: バックエンドがエラー メッセージをスローする

2016-11-15 10:56:27: pid 31043: 詳細: バックエンドからのエラーのため、現在のセッションを終了しています

2016-11-15 10:56:27: pid 31043: ヒント: バックエンド エラー: 「ポータル "pgpool31043" は存在しません」

2)キャッシングを無効にしてpgpoolでJDBCを使用すると動作します

3) キャッシングを有効または無効にして pgpool で psycopg2 または psql コマンドラインを使用すると動作します

JDBCだけが機能しない理由を誰かが理解するのを手伝ってくれますか?

4

1 に答える 1

5

JDBC が通信に使用するプロトコルには、シンプル クエリ プロトコルと拡張クエリ プロトコルの 2 つがあります。

ただし、pgpool II は拡張クエリ プロトコルではうまく機能しません。

github ( https://github.com/pgjdbc/pgjdbc ) の pgjdbc ドライバーのドキュメントには、preferQueryMode という名前のパラメーターがあります。この問題を解決するには、preferQueryMode を simple に設定するだけで問題は解決します。

postgres と redshift の前で pgpool を使用して、これまでに 2 人の顧客でこのセットアップをテストしましたが、完全に機能しました。

于 2017-01-12T16:37:59.500 に答える