CodeGym /Cours /SQL SELF /Importer des données depuis des fichiers CSV avec la comm...

Importer des données depuis des fichiers CSV avec la commande `COPY`

SQL SELF
Niveau 23 , Leçon 1
Disponible

Salut à tous ! Imagine que t'as un tableau Excel avec 10 000 lignes, et ton boss te sort : "Charge-moi ça dans la base !" Hmm... si tu tentes d'insérer les données à la main, ben... tu vas sûrement avoir besoin non seulement de skills SQL, mais aussi de vacances. 😅

Heureusement, PostgreSQL a une commande qui fait office de téléporteur du CSV vers la base — c'est COPY. Elle charge les données instantanément, en masse et sans prise de tête. Aujourd'hui, on va voir comment marche COPY, comment préparer tes données, et quoi faire si jamais y'a une "virgule flottante" ou un caractère chelou dans le fichier. C'est parti !

Bases de la commande COPY

COPY — c'est une commande PostgreSQL qui permet de déplacer des données entre une table et le système de fichiers. Elle est super utile pour charger des données en masse dans la base ou pour les exporter.

Exemple de syntaxe COPY pour charger des données dans une table :

COPY table_name FROM 'path/to/your/file.csv' DELIMITER ',' CSV HEADER;

Les paramètres principaux :

  • FROM 'path/to/your/file.csv' : indique le chemin vers ton fichier CSV.
  • DELIMITER ',' : précise le caractère séparateur (ici, c'est la virgule).
  • CSV HEADER : indique que le fichier CSV a un en-tête (la première ligne avec les noms des colonnes).

La commande COPY s'exécute directement sur le serveur, ce qui la rend ultra rapide pour bosser avec de gros volumes de données.

Différence entre COPY et \COPY

Parfois tu peux te mélanger un peu entre COPY et \COPY.

  • COPY : s'exécute côté serveur. Utilisée pour charger des fichiers qui sont sur le serveur.
  • \COPY : commande côté client, dispo dans psql. Le chargement se fait depuis ton ordi local.

Si tu bosses sur ta machine locale, tu vas sûrement utiliser \COPY. On en parlera un peu plus loin.

Exemple d'utilisation de COPY

Allez, on passe direct à un exemple pour piger comment ça marche en vrai.

Étape 1 : Préparer la table

Imagine qu'on crée une table pour stocker des infos sur les étudiants :

CREATE TABLE students (
    student_id SERIAL PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    date_of_birth DATE,
    grade FLOAT
);

Étape 2 : Préparer le fichier CSV

Le format de ton fichier CSV doit coller à la table. Exemple de fichier students.csv :

first_name,last_name,date_of_birth,grade
John,Doe,2001-05-15,85.5
Jane,Smith,2000-12-22,90.0
Alice,Johnson,2002-03-10,78.0
Bob,Brown,2001-08-30,NULL

Fais gaffe : l'ordre des colonnes dans le CSV doit correspondre à celui de la table, et les types de données doivent matcher (par exemple, la date doit être au format YYYY-MM-DD).

Étape 3 : Charger les données

Pour charger le fichier students.csv dans la table students, utilise la commande suivante :

COPY students (first_name, last_name, date_of_birth, grade)
FROM '/path/to/your/students.csv'
DELIMITER ',' 
CSV HEADER;

Qu'est-ce qui se passe ici ?

  • On indique le nom de la table students et les colonnes où on charge les données.
  • Le chemin du fichier pointe vers son emplacement.
  • Le séparateur , précise que les données sont séparées par des virgules.
  • Le paramètre CSV HEADER dit à PostgreSQL que la première ligne du fichier contient les noms des colonnes.

Résultat :

Après avoir lancé la commande, les données du fichier sont chargées dans la table, et tu peux direct les vérifier :

SELECT * FROM students;

Contraintes et particularités

Pour éviter les erreurs, assure-toi que ton fichier CSV respecte ces points :

  1. Pas de caractères cachés ou d'espaces dans la ligne d'en-tête.
  2. Bonne encodage : sur PostgreSQL, on recommande généralement UTF-8.
  3. Le séparateur doit correspondre au paramètre DELIMITER indiqué.

Erreurs classiques lors du chargement avec COPY :

Structure des données non conforme. Par exemple, si tu tentes de charger une valeur texte dans un champ numérique :

ERROR: invalid input syntax for type numeric: "abc"

Pour éviter ça, vérifie que les données correspondent bien au type attendu.

Erreur de chemin de fichier.

Si le fichier est en dehors du dossier accessible par PostgreSQL sur le serveur, tu vas avoir une erreur :

ERROR: could not open file "/path/to/your/file.csv" for reading: Permission denied

La solution, c'est de bien régler les droits d'accès au fichier.

Comment vérifier que les données sont bien chargées ?

Après avoir chargé les données, c'est utile de checker que tout s'est bien passé. Par exemple :

Vérifier le nombre total de lignes :

SELECT COUNT(*) FROM students;

Chercher les valeurs nulles (par exemple si la colonne grade contient NULL) :

SELECT * FROM students WHERE grade IS NULL;

Astuces utiles pour bosser avec COPY

Loggue les erreurs. Si tu veux enregistrer les erreurs dans un fichier à part, utilise le paramètre LOG ERRORS. (Sur PostgreSQL version 12+).

Désactive les index et triggers.

Quand tu charges beaucoup de données, tu peux temporairement désactiver les triggers :

ALTER TABLE students DISABLE TRIGGER ALL;

Utilise les transactions.

Ça te permet de charger les données "atomiquement" — soit tout est chargé, soit tout est annulé en cas d'erreur :

BEGIN;
COPY students FROM '/path/to/your/file.csv' CSV HEADER;
COMMIT;

Cas pratiques

Savoir utiliser la commande COPY ne sert pas qu'aux admins de bases de données — pour les devs aussi, ça peut vraiment simplifier la vie. Imagine que tu reçois un gros volume de données d'une API externe : tu les sauvegardes d'abord dans un CSV, puis tu les charges vite fait dans PostgreSQL — et hop, tu peux commencer l'analyse. Ou alors, tes collègues te demandent de migrer leur vieille base vers un nouveau système PostgreSQL. Dans ces cas-là, COPY devient carrément ton couteau suisse.

Les fichiers CSV, tu vas en croiser tout le temps dans les vrais projets. Par exemple :

  • Tu charges des stats de ventes dans un système d'analyse.
  • Tu importes une liste d'utilisateurs depuis un CRM externe.
  • Tu transfères des données d'Excel vers PostgreSQL sans te prendre la tête.

Voilà, on termine la découverte de la commande COPY. Dans la prochaine leçon, on verra comment préparer les tables pour charger les données et réfléchir à leur structure pour que tout tourne vite et bien. En attendant, n'hésite pas à expérimenter — COPY ouvre vraiment des possibilités pratiques pour bosser avec de gros volumes d'infos.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION