【PostgreSQL】テーブルデータに合わせてシーケンスをリセットする
PostgreSQLにてシーケンス番号をリセットするSQLです。
テストデータのINSERTやDELETEを何度も繰り返しているうちに
シーケンス番号とテーブルのレコード件数が合わなくなってしまった時などに使用します。
シーケンス番号とレコード件数は別に合わせなければいけないわけではないですが
「最初の1件目をINSERTしたのにシーケンス番号が3から始まるのは気持ち悪い」とか
「今テーブルに2000件入っているので次にINSERTされるシーケンス番号は2001にしたい」
といった要望が世の中はあるかと思いますので、メモとして残します。
次にINSERTするシーケンス番号が今のレコード件数+1から始まるように設定
SELECT pg_catalog.setval( '<対象のシーケンス名>', (SELECT COUNT(1) + 1 FROM <対象のテーブル名>), false);
次にINSERTするシーケンス番号が今のレコードの最大値+1から始まるように設定
※レコード件数が0件の場合は1から始まるよう設定
SELECT pg_catalog.setval( '<対象のシーケンス名>', COALESCE((SELECT MAX(<対象の列名>) + 1 FROM <対象のテーブル名>) , 1), false);