snbhsmt_log

ネットワークとコンピュータ、その他いろいろ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PostgreSQL の連番型

連番型の項目を持つテーブルを作成。 SERIAL 値は bigint で管理される。
CREATE TABLE tablename (
id     SERIAL,
name   TEXT,
   :
);
INSERT するなら以下の権限設定も必要。
GRANT update ON テーブル名_カラム名_seq TO ユーザ名;

レコードを INSERT する。 連番型のカラムを指定しなくても 1 から順番に値が設定される。
INSERT INTO tablename (name) VALUES ('foo');
以下の様に INSERT しても同じ。
INSERT INTO tablename (id, name) VALUES (DEFAULT, 'foo');

任意の数値を指定しても INSERT 可能。なぜなら何も制約条件を指定してないから。
INSERT INTO tablename (id, name) VALUES (10, 'foo');
SERIAL 値は、そのカラムを指定しないか DEFAULT を指定して INSERT した場合に インクリメントされる。 だから上記の様に 10 を指定して INSERT しても、次は 11 にはならない。 その場合、もしカラムに UNIQUE 制約がなければ再度 10 のレコードが INSERT される。 UNIQUE 制約が付加されていれば INSERT エラーとなる。

以下で SERIAL 値を初期化できる。 次に INSERT すると 10 が設定される。
SELECT SETVAL('テーブル名_カラム名_seq', 10, FALSE);

SERIAL 値はテーブルを DROP するとクリアされる。TRUNCATE しても初期化されない。
SERIAL 値はロールバックされない。次に INSERT & COMMIT するとそのシリアル値の 次の値が入る。
スポンサーサイト

« SQLでテーブルをリネームしたりコピーしたりする|Top|XML::SAX の ParserDetails.ini »

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://snbhsmt.blog110.fc2.com/tb.php/105-662288a1

Top

HOME

Author:snbhsmt
Google Profiles

http://www.ksky.ne.jp/~snbhsmt/

全ての記事を表示する

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。