LoginSignup
5
14

More than 3 years have passed since last update.

シーケンスの利用方法(PostgreSQL)

Last updated at Posted at 2019-10-26

シーケンスとは

 シーケンスとは、連番を払い出してくれるものです。テーブルの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

5
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
14