[PHP-users 4313] Re: pgsql非同期関数について

Tatsuo Ishii php-users@php.gr.jp
Sat, 15 Dec 2001 21:47:28 +0900


石井です.大変遅くなりましたが,以下のテストを PostgreSQL 6.5.3 で行い
ました.ただし,使った4.2.0-dev(php4-200112150300)にはすでにこのパッチ
が含まれているようなので,パッチなしにテストスクリプトのみパッチキット
から借用しました.以下に環境を示します.

Vine Linux 2.1CR/x86(glibcは2.1.3に変更)
Apache 1.3.22
PostgreSQL 6.5.3

PHPのconfigureは,

./configure  --without-mysql --with-apxs=/usr/local/apache/bin/apxs
--with-pgsql=/usr/local/src/pgsql/6.5.3 --enable-mbstr-enc-trans
--enable-mbstring --enable-versioning --enable-trans-sid

で行いました.

結果ですが,残念ながら

[Sat Dec 15 21:37:06 2001] [notice] child pid 8123 exit signal Segmentation fault (11)

でApacheが死んでしまいました.ちなみに,テーブルの生成,INSERTをしない
パターン(2回目で,すでにテーブルが存在する場合)では正常終了します.

(以下のようなメッセージが表示されるので,たぶん正常終了しているのだと
思います)
Test table exists *** non-blocking qeury *** Status: Connection is
ready Executing query..... Check result: Ok *** blocking qeury ***
Status: Connection is ready Executing query.. Check result: Ok
--
Tatsuo Ishii

> 大垣です。
> 
> pgsqlの非同期関数を4.2.0に追加しようとしています。メンテナー/作者
> の方とは調整済みです。 前にPatchを送りましたが、特に要望が無かった
> ので再度お聞きします。パッチは4.2.0-dev用なのでソースは
> http://snaps.php.net/
> のソースを使ってください。
> 
> 前に送ったパッチは手っ取り早く実装できるので、非同期関数専用のリ
> ソースを追加しませんでしたが、専用のリソースがあった方が間違いが少
> なくなり便利かもしれないと思っています。pg_send_query()を実行した
> 後に、pg_exec()を実行する等。このパッチではresultが残っている場合
> は無条件に消してしまします。
> 
> 他のpgsqlの関数と違う部分はconnectionを必ず指定する必要がある部分
> が異なっています。(i.e. default connectionを使わない)
> 
> また、非同期でDBとの接続を行う関数もあった方が便利な場合もあるので
> はないかと思っています。特にPHP-GTKの場合、DBサーバーに問題がある
> 場合等にブロックされないので便利と思います。
> 
> 追加予定の関数は以下の関数です。
> 
> bool pg_send_query(resouce_conn)
> Execute query asyncronously
> 
> resouce_result pg_get_result(resource_conn)
> Get async query result for the connection
> 
> bool pg_is_busy(resource_conn)
> Is connection is busy or not. (Executing query or not)
> 
> bool pg_request_cancel(resource_conn)
> Cancel async query currently executing.
> 
> bool pg_reset(resource_conn)
> Reconnect to database backend
> 
> int pg_status(resource_conn)
> Get connection status. PGSQL_CONNECTION_OK or PGSQL_CONNECTION_BAD.
> 
> まだマニュアルには書いて無いと思いますが、Notice Messageの取得は
> 4.0.6からpg_last_notice()で取得できます。だたし、4.0.6の
> pg_last_notice()の実装には問題があるので利用はお勧めしません。
> (4.0.6でのpgsqlの利用はお勧めしません)
> 
> あった方が良い関数や機能、パッチに問題がありましたらメールをくださ
> い。一緒に追加できる物は追加してもらいます。
> 
> このパッチをpgsql 6.5.xでテストして頂けると助かります。
> 
> --
> Yasuo Ohgaki