#シーケンスとは
シーケンスとは、連番を払い出してくれるものです。テーブルのIDなどを挿入する際に使用することができます。
#シーケンスの使用例
テーブルのIDにシーケンスを使用する例を見てみましょう。以下の手順でシーケンスを使います。
(1)シーケンスを作成する
(2)シーケンスをテーブルのIDとして挿入する
##(1)シーケンスを作成する
シーケンスは以下のようにして作成します。オプションには一番最初に払い出す番号をしていするSTARTオプション(例:START 10)があります。開始番号を指定しなかった場合は1となります。
書き方:CREATE SEQUENCE シーケンス名 (オプション)
CREATE SEQUENCE test_seq;
##(2)シーケンスをテーブルのIDとして挿入する
テーブルにIDを挿入するときに、(1)で作成したシーケンスを使います。**nextval('シーケンス名')**で連番を払い出すことができます。
postgres=# CREATE TABLE test_table (id int, name varchar(20));
CREATE TABLE
postgres=# INSERT INTO test_table VALUES (nextval('test_seq'), 'suzuki');
INSERT 0 1
postgres=# INSERT INTO test_table VALUES (nextval('test_seq'), 'ito');
INSERT 0 1
postgres=# INSERT INTO test_table VALUES (nextval('test_seq'), 'sato');
INSERT 0 1
postgres=# SELECT * FROM test_table ;
id | name
----+--------
1 | suzuki
2 | ito
3 | sato
(3 rows)
#シーケンスの値をリセットする方法
シーケンスの値は**setval('シーケンス名', 値)**を使ってリセットすることができます。ちなみに、**currval('シーケンス名')**で一番最後に払い出したシーケンスの値を確認することができます。
postgres=# select setval('test_seq', 1); ---現在のシーケンス番号を1にリセット
setval
--------
1
(1 row)
postgres=# select currval('test_seq'); ---現在の値を確認
currval
---------
1
(1 row)
postgres=# select nextval('test_seq'); ---値の払い出し
nextval
---------
2
(1 row)
#(参考)シーケンスの内容を確認する
シーケンスの内容はメタコマンドを使用して確認することができます。
書き方:\d シーケンス名
postgres=# \d test_seq
Sequence "public.test_seq"
Type | Start | Minimum | Maximum | Increment | Cycles? | Cache
--------+-------+---------+---------------------+-----------+---------+-------
bigint | 1 | 1 | 9223372036854775807 | 1 | no | 1
#まとめ
シーケンスを使用することで一意な連番を作成することができました。nextvalで値の払い出し、currvalで値の確認、setvalで値のリセットをすることができます。
読んでくださり、ありがとうございました!
#参考
PostgreSQLのマニュアル
https://www.postgresql.jp/document/11/html/functions-sequence.html