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標準に準拠し、より安全です。