PostgreSQL

PostgreSQLシーケンス入門|連番の自動生成を管理する

PostgreSQL シーケンス SEQUENCE

PostgreSQLシーケンス入門
連番の自動生成を管理する

PostgreSQLのシーケンスの作成、使用方法、SERIALとの関係を解説します。

こんな人向けの記事です

  • 連番の自動生成の仕組みを知りたい人
  • SERIALとシーケンスの関係を理解したい人
  • シーケンスの値をリセット・管理したい人

Step 1シーケンスとは

シーケンスは、一意な連番を生成するためのデータベースオブジェクトです。主にテーブルの主キーの自動採番に使用されます。SERIAL型を使うと内部的にシーケンスが自動作成されます。

Step 2シーケンスの作成

SQL
-- 基本的なシーケンス
CREATE SEQUENCE my_sequence
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 9999999
    START WITH 1
    CACHE 1;

-- シーケンスをカラムのデフォルト値に設定
CREATE TABLE products (
    id INTEGER DEFAULT nextval('my_sequence') PRIMARY KEY,
    name VARCHAR(100)
);

Step 3シーケンスの操作

SQL
-- 次の値を取得(値が進む)
SELECT nextval('my_sequence');

-- 現在の値を確認(値は進まない)
SELECT currval('my_sequence');

-- 値のリセット
ALTER SEQUENCE my_sequence RESTART WITH 1;

-- シーケンスの削除
DROP SEQUENCE my_sequence;

注意: currval()は同じセッション内でnextval()を実行した後でないと使用できません。

Step 4SERIALとの関係

SERIAL型はシーケンスの簡易記法です。以下の2つは同等です。

SQL
-- SERIAL型を使う場合(簡潔)
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);

-- シーケンスを明示的に使う場合(同等)
CREATE SEQUENCE users_id_seq;
CREATE TABLE users (
    id INTEGER DEFAULT nextval('users_id_seq') PRIMARY KEY,
    name VARCHAR(100)
);

ポイント: PostgreSQL 10以降ではGENERATED ALWAYS AS IDENTITYが推奨されています。SQL標準に準拠し、より安全です。