[PostgreSQL]シーケンスが”1″から始まるようリセットしたい

シーケンスの現在値を設定

シーケンス(sequence)の現在値を設定するにはsetval()を実行します

select setval('シーケンス名', 設定値);

シーケンスより次の値を取り出すにはnextval()を利用しますが、以下のようにシーケンスを 1でリセットするとnextval()で2が返ってきます。

# シーケンスを初期化
select setval('シーケンス名', 1);
# シーケンスより値を取得
select nextval(シーケンス名');
2  ← "2"が返ってくる

“1”から始めたいので setval() で “0” にするとエラーとなり設定できません。

select setval('シーケンス名', 0);
setval: value 0 is out of bounds for sequence "シーケンス名"

どうしましょう

シーケンスを1から始まるように設定する

1から始まるようにリセットするには、setval()の3つめの引数に`false`を指定します

select setval('シーケンス名', 1, false);

これにより、nextval()で`1`が返ってきます

# シーケンスを初期化
select setval('シーケンス名', 1, false);
# シーケンスより値を取得
select nextval(シーケンス名');
1  ← "1"が返ってくる