web-dev-qa-db-fra.com

Comment supprimer un emplacement de réplication dans PostgreSQL 9.4

J'ai un emplacement de réplication que je souhaite supprimer, mais lorsque je le supprime, j'ai une erreur que je ne peux pas supprimer de la vue. Des idées?

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

Utilisation pg_drop_replication_slot:

select pg_drop_replication_slot('bottledwater');

Voir la documentation et ce blog .

L'emplacement de réplication doit être inactif, c'est-à-dire aucune connexion active. Donc, s'il existe une réplique en streaming utilisant l'emplacement, vous devez arrêter la réplique en streaming. Ou vous pouvez changer son recovery.conf pour qu'il n'utilise plus de slot et le redémarre.

37
Craig Ringer

En complément de la réponse acceptée, je voudrais mentionner que la commande suivante n'échouera pas si l'emplacement n'existe pas (cela m'a été utile parce que je l'ai écrit).

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