postgreSQLで通し番号(シーケンス)をリセットする時に1から始めたい場合
例えばこんなテーブルを作ると
CREATE TABLE users( id SERIAL PRIMARY KEY, name VARCHAR(255) );こんなんなる。
Schema | Name | Type | Owner --------+--------------+----------+---------- public | users | table | postgres public | users_id_seq | sequence | postgresしばらく users にデータをインサートした後で、
このシーケンスに対してセレクトをかけると、
SELECT * FROM users_id_seq ;こんな結果が返ってくる
sequence_name | last_value | increment_by | max_value | ・・・ ---------------+------------+--------------+---------------------+------- users_id_seq | 34 | 1 | 9223372036854775807 | ・・・この last_value というのが自動で増えていった id の最後の番号で、これが34になったまま、 users テーブルのデータを消してしまうと、次は id が34から始まってしまう。
1からにしたい、という時に、
select setval ('users_id_seq', 1);とやるんだが、こうすると last_value が1になるので、次は2からになってしまう。
じゃあ、
select setval ('users_id_seq', 0);としてみたらどうかと思うが、これはエラーになる。
ということでこうするとよい。
select setval ('users_id_seq', 1, false);
一回目は last_value は1のままで、is_called が true になり、二回目は last_value は2になる。