PostgreSQL | Sequence を活用する

シーケンスを作成する

CREATE SEQUENCE [シーケンス名];

シーケンス名を変更する

ALTER SEQUENCE [既存のシーケンス名] rename to [新しいシーケンス名];

シーケンス一覧

SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';

シーケンスを削除する

-- seq_foo を削除する。
DROP SEQUENCE seq_foo;

シーケンスを初期化する

drop table tbl_ttt_seq;
drop sequence seq_ttt;

シーケンスの現在値を変更する

SELECT setval('シーケンス名', 希望する値);

シーケンスを確認する

SELECT * FROM pg_class where relkind = 'S';

テーブルを作成する

CREATE TABLE tbl_ttt_seq
(
    seq int not null default nextval('seq_ttt')
,   a varchar(10)
);

テーブル削除時にシーケンスも自動削除されるようにする。これを設定しない場合、テーブル削除後もシーケンスは残る。

ALTER SEQUENCE seq_ttt OWNED BY tbl_ttt_seq.seq;

データを入力する

insert into tbl_ttt_seq (a) values ('aaa');
insert into tbl_ttt_seq (a) values ('bbb');
insert into tbl_ttt_seq (a) values ('ccc');
insert into tbl_ttt_seq (a) values ('ddd');
insert into tbl_ttt_seq (a) values ('eee');

select * from tbl_ttt_seq;

シーケンスの現在値を確認する

select currval('seq_ttt'), nextval('seq_ttt');

シーケンスを変更する

select setval('seq_ttt', 55);

シーケンスの依存関係を確認する

SELECT p.relname, a.adsrc FROM pg_class p
JOIN pg_attrdef a ON (p.relfilenode = a.adrelid)
WHERE a.adsrc ~ 'seq_ttt';

使用中のシーケンスを削除する

alter table tbl_ttt_seq
alter column seq set default null;

drop sequence seq_ttt;

出典: http://dbrang.tistory.com/784 [dBRang]