用語集のすべての用語

IDENTITY 列

PostgreSQL の IDENTITY 列とは?

IDENTITY 列は、暗黙のシーケンスから値を自動的に取得します。PostgreSQL で自動採番のキーを作成する、SQL 標準に準拠した方法です。

IDENTITY 列は GENERATED ALWAYS AS IDENTITY または GENERATED BY DEFAULT AS IDENTITY で宣言します。PostgreSQL はこの列に暗黙のシーケンスを関連付け、INSERT で値が指定されなかった場合は、そのシーケンスから列に値を設定します。

GENERATED ALWAYS の場合、INSERT で明示的に指定した値は、文に OVERRIDING SYSTEM VALUE がない限り拒否されます。BY DEFAULT の場合は、明示的な値が優先されます。IDENTITY 列は SQL 標準に従っていますが、serial は PostgreSQL 独自の古い省略記法です。他のシーケンスと同様に、ロールバックされたトランザクションで使われた番号は再利用されないため、欠番が生じるのは正常です。

例

この例では、id を指定せずに 2 行を挿入して生成された値を返し、列の背後にあるシーケンスの名前を表示します。

CREATE TABLE tickets (
  id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  subject text NOT NULL
);
INSERT INTO tickets (subject) VALUES ('first'), ('second') RETURNING id;

SELECT pg_get_serial_sequence('tickets', 'id');

拡張機能なしの標準の PostgreSQL 16 または 17 で動くプレーンな SQL です。破棄してかまわない空のデータベースで実行してください。

出典

PostgreSQL 公式ドキュメント(英語)。

関連用語