it-swarm.com.de

So löschen Sie den Replikationssteckplatz in postgres 9.4

Ich habe einen Replikationssteckplatz, den ich löschen möchte, aber beim Löschen wurde eine Fehlermeldung angezeigt, die ich nicht aus der Ansicht löschen kann. Irgendwelche Ideen?

postgres=# SELECT * FROM pg_replication_slots ;
  slot_name   |    plugin    | slot_type | datoid | database | active | xmin | catalog_xmin | restart_lsn
--------------+--------------+-----------+--------+----------+--------+------+--------------+-------------
 bottledwater | bottledwater | logical   |  12141 | postgres | t      |      |       374036 | E/FE8D9010
(1 row)

postgres=# delete from pg_replication_slots;
ERROR:  cannot delete from view "pg_replication_slots"
DETAIL:  Views that do not select from a single table or view are not automatically updatable.
HINT:  To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule.
postgres=#
25
Igor Barinov

Verwenden Sie pg_drop_replication_slot:

select pg_drop_replication_slot('bottledwater');

Siehe die Dokumente und dieser Blog .

Der Replikationssteckplatz muss inaktiv sein, d. H. Keine aktiven Verbindungen. Wenn also ein Streaming-Replikat den Steckplatz verwendet, müssen Sie das Streaming-Replikat stoppen. Oder Sie können das recovery.conf Ändern, damit es keinen Steckplatz mehr verwendet, und es neu starten.

37
Craig Ringer

Als Ergänzung zur akzeptierten Antwort möchte ich erwähnen, dass der folgende Befehl nicht fehlschlägt, falls der Steckplatz nicht vorhanden ist (dies war für mich nützlich, da ich das Skript erstellt habe).

select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name = 'bottledwater';
6
Yann Vo