2008年2月28日木曜日

PostgreSQLのシーケンス値を元に戻す

通常シーケンスの値を変更する場合はこんな感じ。
select setval([シーケンス名], [シーケンス値])
僕がよく使用したのはcopy文でデータをインポートし、それに合わせて シーケンスを進めたいってばあい。以下の様にして実行。
select setval([シーケンス名], select max(id) from [テーブル名])
ただシーケンスを初期状態にしたい場合はどうするのかな。
setvalのシーケンス値に0は入れれないし、1を入れても2からスタートしてしまう。
調べてみるとsetvalの第3引数にbooleanを指定してできるみたい。第3引数にfalseを指定するとnextvalが指定した値を返したくれるみたい。よって以下のようにします。

select setval('products_id_seq', 1, false)


まぁ使うときないけど