[pgsql-jp: 27862] Re: バックエンドのプロセスIDを取得したい(サマリ)
(snip)
XXXXXXXX @ cybergate.co.jp
2002年 11月 1日 (金) 14:39:56 JST
----- Original Message -----
From: "XXX XXXXXXXX" <snip>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Friday, November 01, 2002 11:17 AM
Subject: [pgsql-jp: 27855] Re: バックエンドのプロセスIDを取得したい(サマリ)
>XXXX@zoozee です。
>
> [pgsql-jp: 27851]
> sugita @ sra.co.jp wrote:
> > 「どの数字が自分なの?」のために、こうしました。
> (略 サマリ参照)
>
> ありがとうございます。コレは良いですね。使わせていただきます。
>
> > contrib/miscutil/misc_utils.c に古い形式の関数定義で pid 返
> > すのがあります。
>
> ここは探していませんでした。getpid() を呼び出してるだけです
> ね(まぁ、それでいいんですが(笑))。
>
> [pgsql-jp: 27853]
> Tatsuo Ishii <t-ishii @ sra.co.jp> wrote:
> > 要するにgetpid(2)呼び出す関数を作ればいいわけですが,getpid()のように
> > 引数がいらず,かつ戻値がスカラーであるような関数は,「プログラムレス」
:-)
> > でC関数が安直に作れます.
> (略 サマリ参照)
>
> 目から鱗です!言われてみれば「なるほど」・・・という感じです。
> 環境に気をつければお手軽でいいですね。(自宅サーバーはこれで
> チャチャッとやってしまいました)。
> 条件に合えば他の関数、例えば商用のものでも OK なんですね。ちょっ
> と感動。
>
> -------ここから サマリ
> Q)
> バックエンドのプロセスID(PID)を取得したい
> (環境は PostgreSQL 7.2 , JDK1.4 JDBC使用)
>
> A1)
> org.postgressql.Connection の public int pid を利用。
> リトルエンディアンからビッグエンディアンに変換の必要あり。
> --- ここから エンディアン変換式(リトルtoビッグ)
> --- (備忘メモ JDKに標準で用意されているかも)
> intBE = ( intLE << 24 ) | ( ( intLE & 0xff00 ) << 8 ) |
> ( intLE >> 8 ) & 0xff00 ) | ( intLE >> 24 );
> --- ここまで
> (メモ)
> ・コネクションと同時に PID が取得できる。
> ・将来、エンディアン変換は不要になるかも(Connection 内部
> で修正されたり、プロトコルレベルで修正されたり、
> PG_Stream 内部で修正されたり)。
> ・PostgreSQL側のバージョンを気にしないでよい(7.2 or 7.3)。
>
> A2)
> [27851] 杉田さんのユーザー定義関数
> この関数から、自分のバックエンドIDが取得できる。
> この関数の返り値を pg_stat_get_backend_pid(int4) に渡す。
> select pg_stat_get_backend_pid(pg_get_beid());
> --- ここから pg_get_beid.c
> #include "postgres.h"
> #include "fmgr.h"
> #include "backendid.h"
>
> PG_FUNCTION_INFO_V1(pg_get_beid);
>
> Datum pg_get_beid(PG_FUNCTION_ARGS)
> {
> PG_RETURN_INT32(MyBackendId);
> }
> --- ここまで
> (メモ)
> ・その他の pg_stat_get_* 関数に利用できる。
> ・関数自体はプラットフォーム非依存。(たぶん)
>
> A3)
> [27853] 石井さんのユーザー定義関数
> 「引数無し、返り値スカラー」の共有ライブラリ関数を利用。
> getpid(2) をライブラリから直接呼び出す。
> --- ここから
> CREATE FUNCTION getpid() RETURNS INTEGER AS
> '/lib/libc.so.6' LANGUAGE 'c';
> --- ここまで
> (メモ)
> ・プログラムレスでお手軽。
> ・プラットフォーム依存。
>
> (その他メモ)
> ・7.3 には pg_backend_pid() がある。
> ・7.2 で 関数名を pg_backend_pid() としてやることで、バー
> ジョンアップ時にクライアント側プログラムの変更を無くす。
> -------ここまで サマリ
>
> 杉田さん、石井さん、ありがとうございました。
>
>
pgsql-jp メーリングリストの案内