2016-09-02 1 views
0

Je lance un certain nombre de requêtes pour l'analyse adhoc par rapport à une base de données postgres. Plusieurs fois, je vais laisser la connexion ouverte pendant la journée au lieu de se terminer après chaque requête.Restaurer les post-programmes sans mettre fin aux connexions

Je reçois un vidage postgres sur scp via un script shell toutes les cinq minutes et je voudrais restaurer la base de données sans couper les connexions. Est-ce possible?

Répondre

1

L'une des rares activités que vous ne pouvez pas effectuer pendant qu'un utilisateur est connecté est l'abandon de la base de données. Si c'est ce que vous faites pendant la restauration –, vous devrez changer votre approche. Ne supprimez pas la base de données (n'utilisez pas l'option -C dans pg_dump ou pg_restore), mais supprimez plutôt et recréer les schémas et les objets qui ne dépendent pas d'un schéma (comme les objets volumineux).
Vous pouvez utiliser le drapeau -c de pg_dump ou pg_restore pour cela.

L'autre problème que vous pourriez rencontrer est les connexions avec des transactions ouvertes (état “ inactif dans la transaction ”). De telles connexions peuvent contenir des verrous qui vous empêchent de déposer et de recréer des objets, et vous devrez utiliser pg_terminate_backend() pour vous en débarrasser.