[pgsql-jp: 37370] Re: 挿入したデータのserial値を取得する方法
鈴木孝征
takamasa @ thaliana.myhome.cx
2006年 7月 29日 (土) 12:49:26 JST
鈴木孝征です。
皆様ご返答ありがとうございました。currvalを素直に使えばいいことを理解し
ました。serial型のデータを作成したときの自動で作成されるシーケンスの名前
はPostgreSQLのバージョンが変わらない限り変更にならないものとし、今後ソフ
トの開発に役立てて生きたいと思います。
一応下記スクリプトを作成し、currvalの挙動を確認しました。
master.sh
#!/bin/bash
for i in 1 2 3 ; do
php -f child.php $i 3 &
sleep 1
done
child.php
<?php
require_once("DB.php");
ob_end_flush();
$ps = array_shift($argv);
$ps = array_shift($argv);
$sleep = array_shift($argv);
$dsn = array(
'phptype' => 'pgsql',
'database' => 'himitsu',
'username' => 'naisho',
);
$DB = DB::connect($dsn);
#$DB -> query("create table test1 (id serial, name text)");
$DB -> query("insert into test1 (name) values('name $ps')");
$id = $DB -> getOne("select currval('test1_id_seq')");
print "Process: $ps, Time:".date("s").", ID: $id\n";
sleep($sleep);
$id = $DB -> getOne("select currval('test1_id_seq')");
print "Process: $ps, Time:".date("s").", ID: $id\n";
?>
結果
$ ./master.sh
Process: 1, Time:57, ID: 102
Process: 2, Time:58, ID: 103
Process: 3, Time:59, ID: 104
Process: 1, Time:00, ID: 102
Process: 2, Time:01, ID: 103
Process: 3, Time:02, ID: 104
pgsql-jp メーリングリストの案内