Home > pgsql > 1行だけを保証する

1行だけを保証する

Gapless Sequences for Primary Keys: Varlena, LLC | PostgreSQL General Bits Newsletter

PostgreSQL の SERIAL は値が連続していることは保証しない。じゃあ連続する値を得るにはどうしたらいいかという話。なんだけどその中で出てくる以下の SQL が面白かった。

-- Initialize table with one row on creation --
INSERT INTO emp_pk_counter VALUES (0);

-- Disallow further insertions and deletions --
CREATE RULE noins_emp_pk AS ON INSERT TO emp_pk_counter
DO NOTHING;
CREATE RULE nodel_only_emp_pk AS ON DELETE TO emp_pk_counter
DO NOTHING;

emp_pk_counter というテーブルに対して 1 行だけ INSERT しておいて、以降 INSERT も DELETE も無視してしまうという RULE を定義している。これで emp_pk_counter テーブルは 1 行だけということが保証される。設定値を保持するテーブルなんかに使えそうだ。

Writeback:2

from 2007/01/30 (Tue) 15:39:22
from 2007/02/06 (Tue) 18:57:46
Comment Form

writeback message: Ready to post a comment.

TrackBack ping me at
http://www.mono-space.net/blog/pgsql/e060916_sequence.trackback

Page Top