J'ai besoin de synchroniser deux bases de données PostgreSQL (certaines tables de développement db vers la production db) parfois.PostgreSQL, mise à jour des lignes existantes avec pg_restore
Alors je suis venu avec ce script:
[...]
pg_dump -a -F tar -t table1 -t table2 -U user1 dbname1 | \
pg_restore -a -U user2 -d dbname2
[...]
Le problème est que cela fonctionne juste pour les nouvelles lignes ajoutées. Lorsque je modifie une colonne non PK, j'obtiens une erreur de contrainte et la ligne n'est pas mise à jour. Pour chaque ligne vidée, j'ai besoin de vérifier si elle existe dans la base de données de destination (par PK) et si c'est le cas, supprimez-la avant INSERT/COPY.
Merci pour les conseils.
Merci, c'est tout. Cependant, je devrai sauvegarder de nombreuses 'tables de jointure '(avec des FK' en cas de suppression'), mais cela ne devrait pas poser de problème. – woky
Ne pas sauvegarder les tables jointes - supprimez simplement tous les FK de cette table. Sinon, vous devrez sauvegarder les tables de référencement, les tables référençant celles-ci, et ainsi de suite. Très facile de rater quelque chose d'important. Je recommande vraiment de convertir tous les FK en "supprimer aucune action" ou "supprimer supprimer". – Tometzky