[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;
}