Export/Import de table entre deux bases de données PostgreSQL
posté en May 2021
Pour copier le contenu d'une table d'une base vers une autre, on peut utiliser l'ordre COPY.
(voir syntaxe complète sur www.postgresql.org )
COPY <tableName> TO '<fileName>' ( FORMAT binary );
Il est parfois nécessaire de qualifier le nom de la table avec son schéma.
Attention, le répertoire de destination doit être accessible. Pour éviter les problèmes de droits, il est préférable d'utiliser les répertoires 'Temp';
copy production.clients to 'C:\temp\production_clients.bin' ( FORMAT binary );
Après avoir transféré le fichier binaire contenant les données de la tables à transférer, et connecté sur notre base de destination, on exécute l'ordre COPY à partir de ce fichier.
Ici, le fichier à été copier sous un répertoire unix '/tmp';
copy test.clients from '/tmp/production_clients.bin' ( FORMAT binary );
Attention, la table doit être vide ou ne pas contenir les enregistrements importés, sinon l'erreur suivante sera affichée :
ERROR: duplicate key value violates unique constraint "...pk"
DETAIL: Key (name)=(value) already exists.
CONTEXT: COPY sys_font, line 1
Si vous souhaitez vider la table avant cette opération d'importation, sans la supprimer, on peux utiliser l'ordre TRUNCATE TABLE:
TRUNCATE TABLE test.clients;