[pgsql-jp: 27680] テーブルにロックがかからない

shushu2 shushu2 @ yahoo.co.jp
2002年 10月 18日 (金) 15:23:26 JST


外川と申します。PHPのソースコードなので
PHPのMLに書くべきかと思いましたがSQLの質問なので
こちらに質問させていただきました。ご了承くださいませ。

下記のような記述でテーブルロックのテストをしていたのです
が
2つのブラウザで時間差でアクセスするとインサートされる
IDがだぶって登録されてしまいます。
私のイメージですと
Aのブラウザで下記PGを実行すると
Bのブラウザで実行された下記PGはAのブラウザより
実行されたPGがCOMMITされるのを待って
最新IDを取得してインサートしてくれると思ったのですが。
。
どのような記述をしたら同じPGを時間差でアクセスした場合
IDが競合せず採番できるのかご教授ください。
シリアル型使えば簡単かと思うのですが事情があって
テーブルの構成は変えられないんです。。。
よろしくお願いします。

$conn->query("BEGIN");
$conn->query("LOCK TABLE test IN ACCESS SHARE MODE");
for($i=0 ; $i<300 ; $i++){
    // 最新ID主特
    $sql="select max(id)+1 from test";
    $conn->query($sql);
    $conn->next_record();
    $id = $conn->f("max");
    $sql = "insert into ttt values($id)";
    $conn->query($sql);
}
$conn->query("END");

__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/




pgsql-jp メーリングリストの案内