3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

(PostgreSQL)シーケンスについて理解する

Posted at

シーケンスとは

日本語版マニュアルには、

シーケンスオブジェクト(シーケンス生成器とも単にシーケンスとも呼ばれます)とは CREATE SEQUENCE コマンドで作成される 1 行の特別なテーブルです。シーケンスオブジェクトは通常テーブルの行に一意の識別子を生成するために使用されます。

と書いてる。
めっちゃ簡単に説明すると

シーケンス = 連番を生成するモノ

という理解でOK。

主に主キーや一意のIDの生成など、連続した番号が必要な場面で使用される。

実際に使ってみる

シーケンスの作成
CREATE SEQUENCE example_table_id_seq   -- シーケンス名
    INCREMENT BY 1                     -- 増分値
    MINVALUE 1                         -- 最小値
    MAXVALUE 2147483647                -- 最大値
    START WITH 1                       -- 初期値
    CACHE 1;                           -- キャッシュ値
idにシーケンスを設定
CREATE TABLE example_table (
    -- nextval()を使ってシーケンスの次の値を取ってくる
    id INTEGER PRIMARY KEY DEFAULT nextval('example_table_id_seq'),
    name VARCHAR(255)
);

idにシーケンスを設定したので、試しにidの値を指定せずにインサートしてみる

idの値を指定せずにインサート
INSERT INTO example_table (name) VALUES
('denji'),
('power'),
('aki');

結果、idに連番が付与されている

id name
1 denji
2 power
3 aki

SERIAL型について

カラムのデータ型を SERIAL にすることで、前述のシーケンスの作成・設定を自動で行ってくれる。

SERIAL型
CREATE TABLE example_table (
    id SERIAL PRIMARY KEY, -- SERIAL
    name VARCHAR(255)
);

内部で「テーブル名_カラム名_seq」という名前のシーケンスが自動で作成される。
例の場合、「example_table_id_seq」というシーケンスを生成。

また、SERIALを使った場合、シーケンスの設定は以下のとおり(前述の設定と同様)

CREATE SEQUENCE example_table_id_seq   -- シーケンス名
    INCREMENT BY 1                     -- 増分値
    MINVALUE 1                         -- 最小値
    MAXVALUE 2147483647                -- 最大値
    START WITH 1                       -- 初期値
    CACHE 1;                           -- キャッシュ値

なお、データ型がINTEGERとBIGINTの場合で、MAXVALUEの値が変わる
INTEGER :2147483647
BIGINT :9223372036854775807

シーケンスに権限を付与する

勝手にシーケンスの値が変更されることのないよう、権限を付与するのがセキュリティ上重要。

権限の付与、取消
-- 付与
GRANT USAGE ON SEQUENCE example_sequence TO example_user;

-- 取消
REVOKE USAGE ON SEQUENCE example_sequence FROM example_user;
  • USAGE :シーケンスの値を取得できるが、変更はできない
  • UPDATE: シーケンスの値を変更できる
3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?