PostgreSQL9.3のpostgres_fdwに問題

PostgreSQL9.3のpostgres_fdwはOracleを使い慣れた身としてはとてもありがたい機能です。

簡単にどんな機能かというと、別のDBに存在するテーブルを、まるで自分のDBのテーブルの様にSELECT/UPDATE/DELETEしたりJOINしたりできます。

OracleではDBLINK機能で当たり前のように出来ていたことだったので、この機能がリリースされた事に気が付くまではある機能実現が難しく途方に暮れていました。(どんな機能かは、また別途記述したいと思います)

 

無事その機能は実現できたのですが、最近判明したある問題が。

 

テーブルのリンクを使い終わってDBを切断すると、リンク先のDBのログに

2015-09-16 19:53:12 KST LOG: could not receive data from client: No connection could be made because the target machine actively refused it.

こんな感じのログが出力されてます。

どうやらpostgres_fdwがリンク先のDBとの接続を強制的に切断しているのが原因の様です。

 

時々出る位なら良いのですが、今回作成した機能ではマルチスレッドで動作して、スレッド単位に接続/切断を行うためこのログが大量に出力される事に・・・・

 

postgres_fdwの前身のpgsql_fdwでは、任意に切断するpgsql_fdw_disconnect()という関数が用意されていたんですがね。postgres_fdwでは現状用意されていないよう。

 

さて、どう対応したら良いのか。

悩み中です。