【PostgreSQL】シーケンス(serial)を作成する、値を設定する
シーケンス(データ型のserial)とは
シーケンスとはINSERTで値を入れなくとも、自動で採番される列で、CREATE SEQUENCE文で作成することができます。またテーブル作成時、データ型に「serial」を指定した場合も同じくシーケンスとなります。シーケンスは自動で1から採番され、+1ずつされます。また範囲は、1~2,147,483,647の間になります。尚、作成したシーケンスは、pgAdminの「シーケンス」で確認できます。
シーケンスを作成(CREATE SEQUENCE)
CREATE文での列定義は次のように使います。
-- シーケンスの作成
CREATE SEQUENCE seq_name;
-- シーケンスの作成(初期値を設定する場合)
CREATE SEQUENCE seq_name START 1;
CREATE TABLEでのシーケンス作成
シーケンスはCREATE TABLEする時に作成することもでき、列定義に「serial」を指定すると、シーケンスとなります。また、シーケンス名は自動で命名されます。
-- CREATE TABLE時にシーケンス列を作成する
CREATE TABLE テーブル名
(・・・
seq serial, -- 列定義をserialにするとシーケンスとなる
・・・)
-- すでにあるテーブルにシーケンス列を追加する
-- シーケンス名は''で囲むため注意
alter table テーブル名 add column 列名 integer NOT NULL DEFAULT nextval('シーケンス名');
alter table test add column testcol integer NOT NULL DEFAULT nextval('seq_name')
テーブル作成後、SQL文を確認するとシーケンス名が確認できます。
シーケンス値を設定する
シーケンス値は、次のSELECT文を実行することで値を設定できます。
設定後はその値から再度カウントアップを始めます。
-- シーケンス「seq_name」を1に設定
-- "1"を変更すればその値から再度カウントアップします
select SETVAL('seq_name', 1 , false);
-- 3つ目の引数(true / false)の違い
SELECT setval('seq_name', 1000, true); --シーケンスは1001からカウントアップ
SELECT setval('seq_name', 1000, false); --シーケンスは1000からカウントアップ
シーケンス値の値を確認
シーケンス値をSELECT文すると、現在の値等を取得できます。last_valueの値が現在値です。
-- シーケンス「seq_name」の値を確認する
select * from seq_name;
動作確認
実際の動きを確認してみます。
① CREATE文でテーブルを作成します
CREATE TABLE test
(
seq serial NOT NULL, -- serial列
hoge character(10),
CONSTRAINT pk_test PRIMARY KEY (seq)
);
② INSERT文でデータを登録する
serial列に値を設定しないデータ登録を実行します。
③ SELECT文で登録データを確認する
SELECT文を実行し、serial列の値を確認する。
serial列にデータが登録されていることが確認できました。