PostgreSQL Logical Replication Slot Conflict

Netboxのアップデートを先日実施した際にDBのスキーマの追従をさぼった分をやろうかなと。 細かくデータが書き込まれるようなこともないはずなので、いったんSubscriber側を止めて再構築することに。

念の為バックアップを残しつつデータを削除して再構築ansibleを走らせたところ、ERROR: could not create replication slot "サブスクリプション名": ERROR: replication slot "サブスクリプション名" already existsというエラーがでた。 どうやらPublisher側のレプリケーションスロットにSubscriptionの情報が登録されたままで重複しているため、新しい方の名前を変えるなり登録されたままの情報を消すなりしないといけなかった模様。

Publisher側でSELECT * FROM pg_replication_slots;で情報が残っていることを確認し、SELECT pg_drop_replication_slot('サブスクリプション名');で古い情報を削除した後、Subscriber側の再構築を改めて実施すると問題なく処理が完了した。

links

social