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

Mashiki php-users@php.gr.jp
Wed, 20 Nov 2002 10:08:58 +0900


 Mashikiです。

phpからBeginを出し、psqlからrollbackするということは、
できないでしょう。(無改造のphp、psqlからは)

 まさか、ブラウザからBeginとLockとInsertのみ含むphpを
を実行し、確認画面をブラウザに出した後で、次の画面で
commit or rollback したいということでしょうか。

 これは簡単にはできないです。かつ、しないほうがよいでしょう。


 以下のようなコードであれば30秒間ロックがかかっていることは
確認できると思いますがあくまでも確認用ということで。
(設計者はロックの範囲と時間を必要最小限にデザインすべきと
考えます。)

$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....

sleep(30); //30秒間停止

//ロックを済ませ、INSERTなどを済ませた後に

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