[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 メーリングリストの案内