.
Source de l’image : digitalocean.comLa commande COPY dans le postgreSQL est utilisée pour importer les données des fichiers dans la table de la base de données et aussi pour exporter les tables de la base de données vers le fichier.
Par exemple si nous voulons importer les données d’un fichier CSV dans la table de la base de données, la commande suivante est utilisée.
COPY <nom_table> FROM <file_path> DELIMITER ‘,’ CSV ;
La commande ci-dessus suppose que le fichier CSV possède les valeurs de tous les champs de la table avec un délimiteur sous forme de virgule(,) et que les champs sont ordonnés dans le fichier de la même manière que dans la table.
Si le fichier contient les valeurs uniquement pour les champs particuliers de la table, nous devons donner explicitement les noms des champs avec le nom de la table.
Par exemple, si le fichier ne contient des valeurs que pour le champ1, le champ2 et le champ3, mais que la table comporte de nombreux champs,
COPY <nom_table>(champ1, champ2, champ3) FROM <file_path> DELIMITER ‘ , ‘ CSV ;
Si la commande COPY a réussi, elle retournera COPY <nombre de lignes copiées>
Nous pouvons utiliser le HEADER dans la ligne de commande qui permet d’ignorer la première ligne du fichier lors de la copie car elle peut contenir le nom des champs.
COPY <nom_table> FROM <file_path> DELIMITER ‘,’ CSV HEADER ;
Si l’erreur se produit entre l’opération COPY FROM, l’opération sera arrêtée, mais les données stockées jusqu’à présent ne seront pas supprimées. Ces données ne sont pas visibles mais occupent l’espace dans le disque. Dans ce cas, nous devons utiliser la commande VACUUM pour nettoyer les utilisations indésirables du disque.
Exporter vers un fichier à partir d’une table de base de données
La commande COPY TO est utilisée pour copier les tables de la base de données dans le fichier en utilisant le délimiteur requis.
COPY <nom_table> TO <file_path> DELIMITER ‘,’ CSV HEADER ;
Si vous ne voulez pas que les noms de colonnes soient copiés dans le fichier CSV, alors vous pouvez ignorer le HEADER.
Pour exporter uniquement les champs particuliers, vous pouvez donner les noms de champs avec le nom de la table.
COPY <nom_table>(champ1, champ2, champ3) TO <file_path> DELIMITER ‘,’ CSV ;
Nous pouvons également utiliser des requêtes pour copier les enregistrements particuliers qui correspondent à la condition dans le fichier.
COPY ( SELECT * FROM <table>WHERE id=10 ) TO <file_path> DELIMITER ‘,’ CSV;
Il est recommandé de donner le nom de chemin absolu tout en utilisant COPY. Le serveur lui-même vous oblige à utiliser le nom de chemin absolu tout en utilisant COPY TO. Mais pendant la lecture du fichier par COPY FROM, vous pouvez utiliser aussi bien des noms de chemin absolus que relatifs.
Différence entre la commande COPY et \copy
Si vous êtes connecté à un serveur PostgreSQL distant et que vous voulez copier les enregistrements d’une table dans le fichier de la machine locale. Dans ce cas, vous pouvez utiliser la commande \copy qui est une commande intégrée de PostgreSQL. Pendant l’utilisation de COPY, le serveur effectue l’opération d’écriture mais pendant \copy, le psql écrit le fichier CSV et le transfère dans la machine locale.
Pour utiliser la commande \copy, votre machine locale doit avoir des privilèges suffisants. Cela ne signifie pas les privilèges de superutilisateur.
pg_dump et pg_restore
Le pg_dump est un outil pour sauvegarder une base de données dans le fichier. On peut la restaurer plus tard dans une autre base de données. Pour sauvegarder la base de données dans un fichier exécutez,
pg_dump -U <username> -h <host> -W -F t <db_name>><output_filename>
où,
-W force à demander un mot de passe lors de la connexion à la base de données.
-F spécifie le format du fichier dump créé, ici t fait référence au fichier tar.
Maintenant le fichier dump est créé pour la base de données.
En outre, nous pouvons restaurer le fichier dans la nouvelle base de données en utilisant,
pg_restore -U <username> -h <host> -W -F t -d <db_name><dump_file_name>
Tous les paramètres sont les mêmes que ceux de ci-dessus.