シーケンスとは
シーケンスは、主にデータベースにおける自動増分値を生成するために使用されるオブジェクトです。特にPostgreSQLではよく使われます。シーケンスは、主にテーブルのプライマリキーやユニークな識別子を生成するために使用されます。例えば、新しいレコードを挿入するたびに、そのテーブルの主キーがシーケンスによって自動的に割り当てられることが多いです。
シーケンスオブジェクトは、テーブルとは独立して存在し、次に使用する値や現在の値を管理します。このため、シーケンスの現在の値や次に生成される値を簡単に取得したり、手動で変更したりすることができます。
シーケンスの操作方法
1. 現在のシーケンスの値を確認する
シーケンスの現在の値(last_value)は、次に挿入されるIDの確認に使えます。
SELECT last_value FROM example_id_seq;
これにより、次に生成される値がわかります。例えば、結果が34の場合、直前に生成されたIDが34であり、通常は次のIDは35になります。
2. 次のシーケンスの値を取得する
シーケンスの次の値を取得するには、nextval() を使用します。
SELECT nextval('example_id_seq');
このクエリを実行すると、現在のシーケンスが1つ進み、次に挿入される値が返されます。
3. シーケンスの手動操作
シーケンスの値は、手動で操作することも可能です。例えば、以下のようにしてシーケンスの値を33に設定することができます。
SELECT setval('leverages_workplace_temphire_id_seq', 33);
このコマンドにより、シーケンスの次の値が33に設定され、次に生成されるIDは33になります。
シーケンスとテーブルのレコード数の関係
シーケンスの値は、テーブルのレコード数とは直接の関係がありません。レコードの削除やシーケンスの手動操作などにより、シーケンスの値とテーブル内のレコード数が一致しないことがあります。例えば、以下のような状況が発生することがあります。
例:
テーブルからレコードを削除しても、シーケンスの値はそのまま進行します。例えば、レコード数が22であっても、シーケンスの last_value が33の場合、次に挿入されるIDはシーケンスの次の値である34です。
シーケンスの活用ポイント
- 複数のテーブルで共通のシーケンスを使用して、一意なIDを生成する必要がある場合
- データの削除やリセット後に、シーケンスの値を手動で調整したい場合
- 特定のパターンで連番を管理したい場合