こんにちは、さるまりんです。
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進めることができて、同じ値が生成されずエラーが発生することは無くなりました。
よかった〜。
予期せぬことがあると慌てますね。
落ち着いて一つずつ対応していきたいです。
読んでくださってありがとうございました。
それではまた!