2016-12-27 1 views
0

J'utilise Postgres 9.5 sur Mac Sierra. Je veux exporter des données de table de ma machine locale et les importer dans une base de données Postgres 9.5 sur une machine Linux. Note Je ne veux pas souffler les données sur la machine Linux, seulement ajouter les lignes de la table de ma machine locale aux lignes qui existent déjà sur les tables dans l'environnement Linux (et ignorer les doublons). Donc, sur ma machine locale, j'ai couruComment est-ce que j'exporte des données mon Postgres db local et l'importe à une télécommande sans supprimer toutes les données de la télécommande?

pg_dump -U myusername --format custom --section data --inserts --file "t1.backup" --table "table1" --table "table2" --table "addresses" "mydb" 

Cependant sur ma machine distante, quand je tente d'importer le fichier, je reçois l'erreur

[email protected]:/tmp$ psql db_production < t1.backup 
The input is a PostgreSQL custom-format dump. 
Use the pg_restore command-line client to restore this dump to a database. 

Mais je ne veux pas utiliser parce que pg_restore Je ne veux pas effacer les données de la table existante, je veux simplement y ajouter. Comment puis-je atteindre cet objectif?

Répondre

1

Utilisez --format plain au lieu de custom un. Ce dernier est conçu pour fonctionner exclusivement avec pg_restore. Le format Plain vous permet également de jeter un coup d'œil sur les données sauvegardées avec l'éditeur de texte et de vérifier si c'est ce que vous voulez.

Cependant, mon test rapide montre qu'il est également possible d'ajouter des données avec pg_restore et données uniquement format personnalisé vidage:

pg_restore -d db_production --data-only t1.backup 
+0

Est-il possible de faire la commande INSERT contient les colonnes ainsi que les valeurs? Les deux tables doivent avoir leurs colonnes dans des ordres différents parce que je reçois "Commande était: INSERT INTO table2 VALUES (NULL, NULL, 1759000, '2016-12-10 05: 07: 41.857082', '2016-12-10 05 : 07: 41.857207 ',' Jenny Sosh '... pg_restore: [archiver (db)] n'a pas pu exécuter la requête: ERREUR: syntaxe d'entrée invalide pour entier: "a6a40213-dcd8-4312-9ff1-ae6c23b31ade" LIGNE 1: ..., '7b1df57a-1fc3-4b89-a22b-6ecd33afbe63', 50, 54, 'a6a40213 -... "erreurs malgré le fait que j'ai vérifié qu'elles contiennent les mêmes colonnes – Dave

+0

Utilisez' --column-inserts' (Voir https://www.postgresql.org/docs/current/static/app-pgdump.html pour plus d'informations) –