SQL: convertir le fichier de sauvegarde du format de copie pour insérer le format
-
26-09-2019 - |
Question
J'ai une sauvegarde PostgreSQL faite avec phpPgAdmin en utilisant Export> Copier (au lieu Copier> SQL qui est en fait ce que je dois).
Fichier contient des entrées comme ceci:
COPY tablename(id, field) FROM stdin;
...
Comment convertir ce fichier au format SQL?
INSERT INTO tablename...
Je veux utiliser PgAdmin pour importer ce fichier à l'aide d'exécuter la commande SQL.
La solution
Vous ne pouvez pas convertir ce format SQL (au moins pas carrément).
Si vous ne pouvez pas réexporter, l'option plus simple est de contourner phpPgAdmin , Connectez-vous sur votre serveur et exécuter quelque chose comme
cat [yourdump.sql] | psql [your connections args]
Si vous n'avez pas accès shell à votre serveur, vous pouvez vous essayer de télécharger le fichier (via SFTP ou FTP) et de le charger répercutant phpPgAdmin avec "COPY <table> FROM <path_to_file_on_server>"
. Mais s'il y a beaucoup de tables, vous devez (je crois) diviser le fichier et de le faire un à la fois.
Autres conseils
Je ne sais pas d'une manière ou d'un outil qui peut convertir des déclarations « COPIE » dans « INSERT ».
Mais avec l'outil de ligne de commande « pg_dump » vous pouvez créer un fichier de vidage DB avec des déclarations « INSERT » au lieu de « copier ». Utilisation simple l'argument "--column inserts" (peut être "--inserts" est ok pour vous).
EDIT:
Qu'est-ce que vous pouvez faire est:
- Créer une nouvelle base de données postgres sur votre machine locale
-
Importer votre fichier de vidage de DB dans la nouvelle base de données créée
psql -U <dbuser> <database> < dump.sql
-
Et créer une décharge postgres avec "--column inserts" dans cette base de données
pg_dump --column-inserts -U <dbuser> <database> > dumpWithInserts.sql
Vous pouvez essayer COPIE DE PROGRAMME syntaxe, disponible depuis PostgreSQL 9.3
Par exemple:
COPY tbl_customers (id, address_id, insurance_id, fullname, secret_code ...) FROM PROGRAM 'echo "1 2 \N Ivan Ivanov 42 ..."'
Je l'ai écrit un outil pour convertir la copie de la décharge à inserts de vidage:
https://github.com/freddez/pg-dump2insert
Vous pouvez l'utiliser pour charger une sauvegarde dans une autre base de données ou rechercher spécifique supprimé des valeurs par exemple.