J'ai créé un nouveau vidage de base de données à partir d'un serveur de production avec les indicateurs --data-only
et --column-inserts
, donc je n'ai qu'un tas d'instructions d'insertion pour insérer des données lors d'une restauration sur un serveur intermédiaire.
pg_dump -h localhost -U adminuser --data-only --column-inserts maindb > maindb.sql
Comment puis-je supprimer toutes les données de la base de données du serveur de transfert avant de restaurer les données à partir du vidage de production?
Je veux supprimer toutes les données uniquement pour ne pas avoir à supprimer et à créer la base de données et tout ça. Je veux juste supprimer des données et insérer de nouvelles données, c'est tout.
Je n'ai pas la possibilité de supprimer et de créer la base de données pour plusieurs raisons. Je vais devoir supprimer toutes les données et les insérer uniquement, donc tout ce qu'il faut pour trouver comment faire, je suis prêt à y aller, mais j'ai évidemment besoin d'aide pour commencer.
J'ai également besoin d'automatiser ce processus. Automatisera le "vidage des données de la base de données de production", puis "la suppression des données sur la base de données intermédiaire", puis "la restauration des données vers la base de données intermédiaire". J'ai juste besoin d'aide sur la partie "suppression de données sur la base de données intermédiaire".
Je cours sur PostgreSQL 9.5.2
la source
TRUNCATE table1, table2, ... <list of all tables>;
? font-ils tous les deux la même chose?pg_restore a un indicateur --clean (ou éventuellement --create) qui supprimera automatiquement les données avant d'exécuter les opérations.
L'excellente documentation devrait vous aider grandement ...
Juste pour clarifier, au cas où cela prêterait à confusion:
Cela ne supprimera pas la base de données réelle .. uniquement les tables / vues / etc.
Si, pour une raison quelconque, la suppression et la recréation des tables ne sont pas acceptables, vous devrez mettre plus de travail pour créer manuellement un script qui crée un
data only
vidage à partir de la base de données source, des problèmesTRUNCATE
ouDELETE
de la base de données cible, puis charge le vidage de données. Pour autant que je sache, il n'y a pas de façon rapide / simple de le faire.la source
La requête ci-dessus générera des requêtes tronquées pour toutes les tables de la base de données.
la source
Remarque: ma réponse consiste à supprimer réellement les tables et autres objets de base de données; pour la suppression de toutes les données dans les tableaux, à savoir tronquer toutes les tables , Endre deux a fourni une déclaration (exécution directe) Similairement bien exécuté un mois plus tard.
Pour les cas où vous ne pouvez pas simplement
DROP SCHEMA public CASCADE;
,DROP OWNED BY current_user;
ou quelque chose comme ça, voici un script SQL autonome que j'ai écrit, qui est sûr pour les transactions (c'est-à-dire que vous pouvez le mettre entreBEGIN;
et soit leROLLBACK;
tester simplement, soitCOMMIT;
faire l'acte) et nettoie «tous» les objets de la base de données… eh bien, tous ceux utilisés dans la base de données que notre application utilise ou je pourrais raisonnablement ajouter, à savoir:CHECK
,UNIQUE
)VIEW
s (normal ou matérialisé)public
ou internes à la base de données) que «nous» possédons: le script est utile lorsqu'il est exécuté comme «pas un superutilisateur de base de données»; un superutilisateur peut supprimer tous les schémas (les plus importants sont cependant explicitement exclus)Non abandonnés sont (certains délibérés; certains uniquement parce que je n'avais aucun exemple dans notre DB):
public
schéma (par exemple pour les éléments fournis par l'extension)Ceci est vraiment utile dans les cas où le vidage que vous souhaitez restaurer est d'une version de schéma de base de données différente (par exemple avec Debian
dbconfig-common
, Flyway ou Liquibase / DB-Manul) que la base de données dans laquelle vous souhaitez le restaurer.J'ai également une version qui supprime «tout sauf deux tables et ce qui leur appartient» (une séquence, testée manuellement, désolé, je sais, ennuyeuse) au cas où quelqu'un serait intéressé; le diff est petit. Contactez-moi ou consultez ce repo si vous êtes intéressé.
SQL
Testé, sauf ajouts ultérieurs (
extensions
contribution de Clément Prévost ), sur PostgreSQL 9.6 (jessie-backports
). Suppression d'agrégats testée sur 9.6 et 12.2, retrait de procédure également testé sur 12.2. Les corrections de bugs et autres améliorations sont les bienvenues!la source