[PHP-users 11564] PHPでPostgreSQLのトランザクションを実行するには?

js php-users@php.gr.jp
Tue, 19 Nov 2002 11:12:46 +0900


こんにちわ。No5573の真似をして、トランザクション中以下のようにテーブルに対し
てロックを掛けたいと思うのですがうまくロックが掛かりません。

$db_con = pg_connect("host=host port=5432 user=postgres dbname=hogehoge");
 if($db_con == false){
     echo "接続できませんでした。";
     exit;
 }

 $sql = "BEGIN;";
 $rs = pg_query($db_con, $sql);
 if ($rs == false){
     echo "失敗\n";
 exit;
 }

 $sql = "LOCK TABLE hoge_table IN ACCESS EXCLUSIVE MODE;";
 $rs = pg_query($db_con, $sql);
 if ($rs == false){
     echo "失敗\n";
 exit;
 }

INSERT,UPDATE....

 このロックを掛けるとROLLBACK COMMIT するまで テーブル hoge_table にアクセス
出来ないようにしたいのですが
別のアプリケーション(ACCESSやpsql)でテーブルを参照すると全ての操作が行えて
しまいます。

psqlから同じようにロックを掛けた場合はロックが有効になりROLLBACK COMMIT する
までアクセスすることが出来ない
状況になりました。

データベースの所有者もスーパーユーザー(postgres)でPHPからのアクセスもスー
パーユーザーでやってみましたが出来ませんでした。
どのようにすればPHPからもロックを掛けることが出来るようになるのでしょうか?
よろしくお願いいたします。