[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 メーリングリストの案内