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

js php-users@php.gr.jp
Wed, 20 Nov 2002 12:06:52 +0900


すみません。私の書き方が正しくありませんでした。

psqlではROLLBACKを行うことが出来るけどphpからは出来なかったという意味です。
phpの方でBEGINを実行し、その後テーブルロックをしたはずなのにロックが掛かって
いなかったので

psqlでROLLBACKを行ってみると no transaction in progress とトランザクション
が走っていないという
メッセージが出なかった、といことです。psqlはBEGINの確認のみに利用しました。

ややこしくして申し訳ありません。
やりたいことは過去ログのこれと同じ事なのです。

http://ns1.php.gr.jp/pipermail/php-users/2002-February/005581.html

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

有難うございました。確かにこれで30秒間ロックを掛ける事が出来ました。
ただ、一つしっくりこないのがLOCK TABLEを実行するとCOMMIT or ROLLBACK が来る
までLOCKしたまま
になるかと思っていたのですがphpから行う場合ロックする時間を指定する必要があ
るのでしょうか?
それともINSERT、UPDATEが終わると自動的にロックが解除されるのでしょうか?

私のイメージだとCOMMITをプログラムから外すとテーブルをずっと読み込む事が出来
ない状況が続くのだろう
と思っていたのです。(もちろんこれはトラブルの原因になることは間違いないので
自動ロック解除のがありがたいです)

PHPからトランザクションを行う場合はテーブルロックのようが無ければ、自動的に
解除してくれると解釈してもよいのでしょうか?
明示的なロックが必要なケースはあまりないと思うのですがはっきりさせたいです。

よろしくお願いいたします。