pg_pconnect()の複数接続の注意

2014/06/02

複数のPostgreSQL DBに接続でpg_pconnect()を利用した場合、前の接続情報が引き継がれたような動作をする。 実際、別ファイルでpg_pconnect()でDB接続情報を変更しても、最初のクエリだけ前DB接続情報が引き継がれてしまう症状が発生。

・pg_pconnect()は、Apacheプロセスが持続される ・pg_pconnect()は、pg_close() によって閉じられない ・持続的接続は、スクリプト実行終了時にも閉じられない ・持続的接続の有効は、php.ini の pgsql.allow_persistent を「ON」(デフォルト) ・pg_connect()とpg_pconnect()はお互いの情報を引き継がない

一度のスクリプトで接続先を必ず変更したい場合「PGSQL_CONNECT_FORCE_NEW」を利用するのがよい(恐らく別プロセスで処理される)。

pg_pconnect('DB接続情報', PGSQL_CONNECT_FORCE_NEW);

■参考 PHP:pg_connect PHP:pg_pconnect pg_pconnectの再利用条件とは?