[PHP-users 3002] Re: PEAR+Postgresで Ins ert 時のシリアルを知りたい

清水 昭博 php-users@php.gr.jp
Sat, 20 Oct 2001 17:39:02 +0900 (JST)


清水です

On Sat, 20 Oct 2001 16:15:55 +0900
KOYAMA Tetsuji <koyama@hoge.org> wrote:

>   PHP-4.0.6 に附属する PEAR から nextId() メソッドが使えるようになって
> ます。
> 
>   $db = DB::conecct('pgsql://localhost/dbname');
>   $seqnum = $db->nextId('seqname');

追加情報です。
PostgreSQLの場合、Serial型の場合シーケンス名は、デフォルトで
テーブル名_フィールド名_seq になっていますが、nextIdの引数につける
seqnameは、最後の _seq を除いた名前にしないとnextIdメソッド内で
自動的に _seq をつけてします。
さらに、該当のシーケンスが見つからないと自動的にシーケンスを生成して、
生成したシーケンスの nextval を返してくれます。
(これってバグじゃなくて、仕様ですよねぇ?)

私のところでは、開発者がよく間違うので、nextIdメソッドを書き換えて
_seqをつけないようにしてしまいました。

--
清水 昭博 <gen@hek.co.jp>
SETIランキング:87,788/3,121,706位(7/05現在)
SETI@home(セチ・アット・ホーム)とは、
地球外知的生命体の探査(SETI)を行なう科学実験です。