PostgreSQLのシーケンスを使って一意の番号を振ってみます。
概要
シーケンスとは
一意となる整数をつくります。整数は連番となりカウントアップしていきます。
使いどころ
データを一意に特定する項目を作成したいときや何かの番号を発番するときに利用します。
基本どのDBでも自動で連番を設定する列というのを設定することが可能です。
※PostgreSQLなら「serial型」、SQLServerなら「IDENTITY」を付加
ではどういう場合に使うことがあるのか考えてみました。
・UPDATE時に一意のキーを振る
(serial型はINSERT時に一意に割り振ります)
・コードとかと組み合わせて一意の番号を振る
・登録されている番号の最大を取得し、カウントアップした番号を振る
シーケンスであれば取得したタイミングでカウントアップされますがテーブルから取得する場合は下記のように同じ番号を割り振っていしまう可能性があります。
実装
シーケンス作成
シーケンス作成する際は「CREATE」を利用します。
下記では「seq」というシーケンスの名前を指定しています。
CREATE SEQUENCE seq;
作成する際には様々なオプションを指定することも可能です。
例)
・増加量(マイナスも指定することが可能)
・最初のスタート番号
・限界値
シーケンス番号取得
取得するには「nextval()」を使用します。
増加して返却するため一意の番号を取得できます。
「seq」はシーケンス作成で指定した名前となります。
SELECT nextval('seq');
現在の最大の値を取得する場合は以下で可能です。
この場合シーケンスの増加はありません。
SELECT currval('seq');
またこの値を用いて前ゼロをつけるといったことも可能です。
SELECT lpad(cast(nextval('seq') as character varying), 5, '0');
参考文献
シーケンス操作関数
CREATE SEQUENCE