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

js php-users@php.gr.jp
Wed, 20 Nov 2002 09:11:39 +0900


レス有難うございます。
手違いで一度自宅で受信してしまって転送した為、新しい投稿になっていたら申し訳
ありません。

> >
> > レスがつかないですね。
> > ROLLBACK or COMMITは、どこで、どのタイミングで行おうとしていますか?

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

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

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

とする予定にしています。最初のBEGINだけ実行し、psqlでROLLBACKを実行してみた
のですが
ROLLBACK: no transaction in progress とトランザクションが走っていないようで
した。

他のツールとして
「CSE」というSQL PLUSのようなツールを別のWindows端末から利用してトランザク
ションを開始したところ
正しく実行されましたのでPostgreSQLの側でなくPHPの方が悪いのではないかと

php.iniをデフォルトの設定に戻して実行してみたりしたのですが結果は同じでし
た。
(php.iniはデフォルトの文字コードをSJISにして内部をEUCにする設定をしていまし
た)

PHPは4.2.2 Apacheは1.3.27 PostgreSQLは7.2.2を利用しています。

コンパイルオプション:
Apache #./configure --enable-module=so

PostgreSQL #./configure --enable-multibyte=EUC_JP --enable-syslog --with-tcl

PHP
#./configure --with-pgsql=/usr/local/pgsql --enable-track-vars --with-apxs=/
usr/local/apache/bin/apxs --enable-versioning -without-gd --enable-mbstring 
--enable-calendar --enable-mbstr-enc-trans

昨日から繰り返しこのようなことをしてみたのですがどうにも解決できません。
お力をお貸しください。よろしくお願いいたします。