Je suis à peu près sûr que chacun d’entre nous a été dans une situation où vous avez eu besoin de générer un rapport et/ou d’extraire certaines données d’une base de données et de les présenter dans aspreadsheet. Dans de nombreux cas, nos clients préfèrent Excel pour gérer les feuilles de calcul/rapports, parce que, duh, c’est Excel.

Alors, comment abordez-vous ce problème ? Est-ce que vous copiez et collez les données ? Ou utiliser unRDBMS GUI pour générer le rapport dans une feuille de calcul ? Aujourd’hui, je vais vous montrer une fonctionnalité de PostgreSQL -COPY.

Hello COPY#

D’après la documentation de COPY : « COPY déplace les données entre les tables PostgreSQL et les fichiers du système de fichiers standard. COPY TO copie le contenu d’une table vers un fichier, tandis queCOPY FROM copie les données d’un fichier vers une table (en ajoutant les données à ce qui se trouve déjà dans la table). COPY TO peut également copier les résultats d’une requête SELECT. »

Alors, que fait COPY:

  1. Il peut copier le contenu d’un fichier (données) dans une table, ou
  2. Il peut copier le contenu d’une table (ou le résultat d’une requête SELECT) dans un fichier.

Si une liste de colonnes est spécifiée, COPY ne copiera que les données dans les colonnes spécifiées vers ou depuis le fichier. S’il y a des colonnes dans la table qui ne sont pas dans la liste des colonnes, COPY FROM insérera les valeurs par défaut de ces colonnes.

COPY avec un nom de fichier indique au serveur PostgreSQL de lire ou d’écrire directement dans un fichier. Le fichier doit être accessible au serveur et le nom doit être spécifié du point de vue du serveur. Lorsque STDIN ou STDOUT est spécifié, les données sont transmises via la connexion entre le client et le serveur.

Ça vous va ? Essayons !

Disclaimer : COPY a la capacité de lire/écrire des données depuis/vers des fichiers CSV et binaires. Bien que je sois sûr qu’il y a beaucoup de cas d’utilisation pour l’utilisation de fichiers binaires, dans ce blogpost je vais seulement me concentrer sur son utilisation pour les fichiers CSV parce que, personnellementpour moi, ils sont les plus pratiques pour la manipulation des ensembles de données.

COPY TO#

Lorsque vous voulez créer un fichier CSV à partir d’une requête SELECT, ou vider tous les contenus d’une table dans un fichier CSV, vous pouvez utiliser la commande « COPY &mldr ; TO &mldr ; ».

Utilisation d’une requête SELECT#

Lorsque vous voulez copier un ensemble de résultats dans un fichier CSV, le format de la commande COPY est :

1
COPY (<select-query-here>) TO <file-path>;

Ou, un exemple plus concret :

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv';

Comme vous pouvez le voir, nous utilisons la commande COPY qui copie les résultats dans un fichier CSVfile sur le système de fichiers local. Vous pouvez pousser la requête beaucoup plus loin. Voici un exemple de vie réelle d’un projet sur lequel je travaille actuellement:

1
COPY (SELECT price_rules.* FROM quotes LEFT JOIN price_rules ON quotes.id = price_rules.chargeable_id where quotes.id = 437) TO '~/Desktop/exports/price_rules.csv' CSV;

Comme vous pouvez le voir, vous pouvez utiliser n’importe quelle requête SELECT qui peut retourner un ensemble de résultats de données.Mais, que serait un CSV sans en-têtes, n’est-ce pas ? 🙂

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv' CSV HEADER;

Ajouter le mot HEADER à la fin inclura les en-têtes dans le fichier CSV,qui sont les noms des colonnes de la table.

Aussi, une autre caractéristique clé des fichiers CSV sont les délimiteurs. Selon le délimiteur à caractères que vous voulez que le fichier CSV ait, vous pouvez spécifier lecaractère dans la commande :

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv' CSV DELIMITER ',' HEADER;

Utiliser un nom de table#

Lorsque vous voulez qu’une table entière soit vidée dans un CSV, la commande est vraimentsimple. Vous devez juste spécifier le nom de la table et le fichier cible:

1
COPY people TO '~/Desktop/people.csv' CSV DELIMITER ',' HEADER;

C’est tout.

COPY FROM#

Maintenant, lorsque vous voulez injecter les données du fichier CSV dans une table, vous pouvez utiliser la commande « COPY &mldr ; FROM &mldr ; ». La syntaxe est très simillaire, avec une seule différence clé:

1
COPY <table-name> FROM <file-path> DELIMITER ',' CSV HEADER;

Ou, en utilisant un exemple concret :

1
COPY addresses FROM '~/Desktop/addresses.csv' DELIMITER ',' CSV HEADER;

Outro#

COPY est une fonctionnalité vraiment soignée et cool de Postgres. Pour brewity, j’ai essayé de garder ce blogpost court et simple. Si vous avez des idées et des questions, n’hésitez pas à me laisser un commentaire. Ou, si vous ne vous sentez pas d’humeur bavarde, vous pouvez vous diriger vers la documentation COPY.

Vous avez aimé cet article ? Abonnez-vous à ma lettre d’information et recevez mes nouveaux articles dans votre boîte de réception. Il s’agit d’un bulletin court et agréable, envoyé chaque mois à plus de 1 000 abonnés.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.