PostgreSQLでシーケンスの現在の値を取得して、適当に進める方法

こんにちは、さるまりんです。

PostgreSQLのデータベースがぶっ壊れました。

バックアップから復旧したのですが、実際にプログラムを動かしてみたらエラー。
他のシステムに送っているシーケンスの値が巻き戻ってしまいました。

さあどうしよう。

まずは現在の値の確認です。

select last_value from [シーケンス名];

で直近に生成された値を取得できます。

select last_value from member_id_seq;

こんな感じで値が取得できました。

salu=> select last_value from member_id_seq;
last_value 
------------
1000000653
(1 row)

最新の値はわかりましたね。

これでも取得できます。

select currval('member_id_seq');

ちなみに

select nextval('member_id_seq');

で次の値を取得することができます。

同じ値を生成しないように、えーい、100ほど先に進めてしまえ。

select setval('[シーケンス名]', [設定したい値]);

で設定できます。

こんな感じです。

salu=> select setval('member_id_seq', 1000000753);
setval 
------------
1000000753
(1 row)

これで100進めることができて、同じ値が生成されずエラーが発生することは無くなりました。

よかった〜。

予期せぬことがあると慌てますね。

落ち着いて一つずつ対応していきたいです。

読んでくださってありがとうございました。

それではまた!