CodeGym /Cours /SQL SELF /Utilisation de \COPY pour importer des donn...

Utilisation de \COPY pour importer des données depuis ton ordi

SQL SELF
Niveau 24 , Leçon 0
Disponible

La commande \COPY sert à charger des données dans PostgreSQL directement depuis ton ordi. Contrairement à COPY, qui bosse avec des fichiers sur le serveur PostgreSQL, \COPY fonctionne avec les fichiers accessibles côté client, genre sur ton laptop ou ton PC de bureau.

Tu utilises \COPY quand tu bosses avec des fichiers sur ta machine locale, genre ton laptop. À la différence de COPY, qui lit les fichiers sur le serveur, \COPY te permet d'importer des données que t'as sous la main.

C'est super pratique quand tu développes ou testes un projet sur ta bécane, ou si t'as pas accès au système de fichiers du serveur PostgreSQL. Cette méthode est surtout populaire chez les devs et analystes qui veulent juste charger un CSV pour checker un truc sans se prendre la tête.

Différence entre COPY et \COPY

À première vue, COPY et \COPY se ressemblent, mais leur fonctionnement est différent :

  • COPY s'exécute côté serveur et exige que le fichier soit dans un dossier accessible par PostgreSQL. Il faut que PostgreSQL ait les droits de lecture sur le fichier.

  • \COPY s'exécute côté client, donc le fichier doit être accessible par l'appli cliente, genre psql. Avec \COPY, tu peux charger des fichiers qui sont sur ton ordi, même si t'as pas accès au serveur.

Bases de l'utilisation de \COPY

Syntaxe de la commande

\COPY table FROM 'chemin_du_fichier' [WITH] (options)

Où :

  • table : le nom de la table où tu veux charger les données.
  • chemin_du_fichier : le chemin vers le fichier sur ton ordi.
  • options : paramètres optionnels pour customiser le comportement de la commande.

Exemple :

\COPY students FROM 'C:/data/students.csv' DELIMITER ',' CSV HEADER;
  • students : nom de la table où tu charges les données.
  • 'C:/data/students.csv' : chemin vers le fichier sur ton ordi.
  • DELIMITER ',' : indique le séparateur de champs dans le fichier (ici, la virgule).
  • CSV HEADER : indique que la première ligne du fichier contient les noms des colonnes.

Exemple :

Imaginons que t'as un fichier students.csv avec des infos sur les étudiants, qui se trouve dans ton dossier local, genre C:/data/students.csv. Voilà à quoi il ressemble :

id,nom,âge,spécialité
1,John Doe,20,Informatique
2,Jane Smith,22,Mathématiques
3,Emily White,21,Physique

On veut charger ces données dans la table students. J'ai déjà créé la table dans PostgreSQL avec cette structure :

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    nom TEXT NOT NULL,
    âge INTEGER NOT NULL,
    spécialité TEXT
);

Maintenant, on utilise la commande \COPY pour charger les données :

\COPY students FROM 'C:/data/students.csv' DELIMITER ',' CSV HEADER;

Après cette commande, la table students aura trois lignes venant du fichier students.csv. Tu peux vérifier comme ça :

SELECT * FROM students;

Résultat attendu :

id nom âge spécialité
1 John Doe 20 Informatique
2 Jane Smith 22 Mathématiques
3 Emily White 21 Physique

Options de la commande \COPY

Quand tu utilises \COPY, surtout avec le format CSV, c'est important de piger les options principales qui te permettent de gérer le format des données et de simplifier le boulot. Voilà les plus courantes.

Option FORMAT

Définit le format des données. Les valeurs les plus utilisées : text, csv.

Exemple :

\COPY users FROM 'users.csv' WITH (FORMAT csv)

Pourquoi c'est utile : sans cette option, PostgreSQL pense que tu utilises le format texte avec tabulation. csv est plus universel et lisible.

Option HEADER

Indique que la première ligne du CSV contient les noms des colonnes, pas les données elles-mêmes.

Exemple :

\COPY users FROM 'users.csv' WITH (FORMAT csv, HEADER)

Pourquoi c'est utile : ça permet d'ignorer l'en-tête à l'import — super pratique si tu exportes depuis Excel ou d'autres outils.

Option DELIMITER

Définit le caractère séparateur des champs. Par défaut : virgule pour CSV, tabulation pour TEXT.

Exemple :

\COPY products FROM 'products.csv' WITH (FORMAT csv, DELIMITER ';')

Pourquoi c'est utile : ça permet d'adapter l'import/export à des CSV pas standards, genre avec point-virgule (très courant en Europe).

Option ENCODING

Indique l'encodage du fichier.

Exemple :

\COPY clients FROM 'clients.csv' WITH (FORMAT csv, HEADER, ENCODING 'WIN1251')

Pourquoi c'est utile : ça permet de charger correctement des fichiers encodés Windows ou autres sans devoir les convertir à la main.

Option NULL

Définit quelle valeur texte dans le fichier sera considérée comme NULL.

Exemple :

\COPY orders FROM 'orders.csv' WITH (FORMAT csv, NULL 'NULL')

Pourquoi c'est utile : si dans tes fichiers les valeurs manquantes sont marquées 'NULL', ça aide à bien interpréter les champs vides.

Limites et particularités de \COPY

1. Exigences côté client PostgreSQL

psql est le client PostgreSQL qui supporte la commande \COPY. Vérifie bien que tu utilises celui-là pour bosser avec ta base. Attention, d'autres clients comme pgAdmin ne gèrent pas forcément \COPY.

2. Encodage du fichier

Fais gaffe à l'encodage du fichier que tu importes. PostgreSQL attend du UTF-8. Si ton fichier est en Windows-1251 ou autre, tu risques d'avoir des erreurs. Tu peux convertir l'encodage avec des outils comme iconv ou des éditeurs de texte (genre VS Code).

3. Chemin du fichier sous Windows

Sous Windows, le chemin peut contenir des antislashs (\). Remplace-les par des slashs (/). Par exemple, au lieu de C:\data\students.csv, utilise C:/data/students.csv.

Erreurs fréquentes et comment les régler

1. Erreur d'accès au fichier.

Si tu vois un truc du genre :

could not open file "C:/data/students.csv" for reading: No such file or directory

Vérifie que :

  • Le fichier existe bien à l'endroit indiqué.
  • Tu as mis le chemin absolu correct.
  • T'as les droits d'accès au fichier.

2. Erreur de structure de données. Si la structure du fichier à importer ne correspond pas à celle de la table, tu vas avoir une erreur. Par exemple, si le fichier a des colonnes en plus ou des types de données incorrects, tu verras un message d'erreur. Vérifie les noms et types de colonnes avant d'importer.

3. Problèmes d'encodage. Si le fichier n'est pas en UTF-8, tu risques d'avoir des caractères bizarres à la place du texte. Solution : convertis le fichier en UTF-8 avant de l'importer.

Avantages de \COPY

1. Simplicité d'utilisation. Tu peux charger des données en une seule commande. Pas besoin de transférer les fichiers sur le serveur.

2. Polyvalence. psql marche sur tous les OS principaux, donc tu peux utiliser \COPY partout.

3. Pas de souci d'accès. Comme la commande tourne côté client, t'as pas à te soucier des droits sur les fichiers du serveur.

Limites et conseils

Malgré sa praticité, \COPY a quelques limites :

  • Pas adapté pour des fichiers énormes, car ça fait passer les données sur le réseau entre client et serveur. Pour ça, mieux vaut utiliser COPY côté serveur.
  • Assure-toi que ton fichier est prêt à être importé : corrige les erreurs, vire les lignes inutiles, et que la structure colle à la table.

Pour les gros projets, teste d'abord l'import sur un petit échantillon avant de balancer tout le fichier.

2
Mission
SQL SELF, niveau 24, leçon 0
Bloqué
Chargement de données avec gestion des valeurs NULL
Chargement de données avec gestion des valeurs NULL
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION