【PostgreSQL】シーケンス(serial)を作成する、値を設定する

PostgreSQL入門

シーケンス(データ型の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列にデータが登録されていることが確認できました。