[pgsql-jp: 41371] データベース接続台数を知る方法について

小沢 和也 (Kazuya Ozawa) ozawa @ nippa.co.jp
2013年 4月 23日 (火) 19:35:53 JST


いつもお世話になっております。小沢と申します。

データベースに接続して書込みなどを行う
独自のアプリを作ったのですが、同時に2つ以上のアプリの
データベースへの接続を禁止するため、以下のSQLを
実行して、接続数を判断する事にしています。

SELECT count(*) FROM pg_stat_activity WHERE usename='MyUser'

接続数が1超であれば、すでに他のアプリが接続していると
みなしています(自分自身の接続を含める)。
ところが、このSQLが期待値を返さない時があります。
他に接続しているアプリは無いのに、1超の値を返し、結果として
接続できない状態になってしまいます。
問題なのは、いつもそうなるわけではなく、期待値を得られる時と
そうでない時があり、その違いがわからないという事です。

Postgresの自動処理かなんかで、接続しているときがあるのでしょうか。
(ログを見ると、裏方でいろいろとやっているログが見られますが)
そもそも、このSQLは接続数を知るのに適切でしょうか。
他に何か手段があるのでしょうか。

ネット上でいろいろと調べてみましたが、どうにも答えを
得られません。解決策をお持ちの方は、ぜひご教授
お願いします。

※傾向としては、Windows Vistaや7では起こりにくく、
XPで頻繁に起こっているように見えます。

Postgres 8.0.4(Windows版)
Visual Studio 2005
Libpq.dll+VC++アプリ

以上、よろしくお願い致します。

小沢和也


pgsql-jp メーリングリストの案内