Quand tes données sont déjà sur le serveur, tu peux utiliser la commande COPY pour les charger dans des tables PostgreSQL. C'est super utile surtout si tu bosses avec de gros volumes de données ou si ton serveur PostgreSQL tourne sur une machine séparée.
La commande COPY exécutée côté serveur est particulièrement pratique dans les vrais projets. Déjà, elle est bien plus rapide, vu que les fichiers sont déjà sur le serveur, donc pas besoin de les transférer par le réseau. C'est aussi plus safe : pas besoin de copier les données depuis ton ordi local, donc moins de risques de fuite. En plus, tu peux facilement intégrer le chargement dans des scripts serveur automatisés ou des services en arrière-plan — genre pour mettre à jour régulièrement des tables d'analyse.
Syntaxe de la commande COPY
La commande COPY est simple, mais y'a quelques points clés à garder en tête :
COPY table_name
FROM '/path/to/file.csv'
WITH (FORMAT CSV, HEADER TRUE);
table_name— le nom de la table où tu veux charger les données./path/to/file.csv— le chemin complet vers le fichier sur le serveur.- Les options
WITHte permettent de préciser le format du fichier, la présence d'en-têtes, les séparateurs et plein d'autres trucs.
Exemple d'utilisation de la commande COPY
On va voir un petit exemple. Imaginons que tu dois charger un fichier CSV avec des données sur des étudiants dans une base PostgreSQL. Le fichier est sur le serveur à l'emplacement /var/lib/postgresql/data/students.csv.
Étape 1. Table pour les données
D'abord, on vérifie qu'il y a une table dans la base où on peut charger les données :
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
registration_date DATE
);
Cette table va stocker les infos sur les étudiants : leur nom, email et date d'inscription.
Étape 2. Fichier CSV
Voilà à quoi peut ressembler le fichier /var/lib/postgresql/data/students.csv :
id,name,email,registration_date
1,Alex Lin,alex.lin@example.com,2023-09-01
2,Maria Chi,maria.chi@example.com,2023-09-02
3,Peter Ming,peter.ming@example.com,2023-09-02
Étape 3. Commande COPY
Maintenant, on peut utiliser COPY pour charger les données du fichier dans la table :
COPY students
FROM '/var/lib/postgresql/data/students.csv'
WITH (FORMAT CSV, HEADER TRUE);
Ici :
FORMAT CSVdit à PostgreSQL que le fichier est au format CSV.HEADER TRUEveut dire que la première ligne du fichier contient les noms des colonnes.
Après avoir lancé la commande, les données du fichier vont remplir la table students.
Vérification du résultat
Après le chargement, vérifie que tout s'est bien passé :
SELECT * FROM students;
Tu verras les lignes du fichier chargées dans ta table :
| id | name | registration_date | |
|---|---|---|---|
| 1 | Alex Lin | alex.lin@example.com | 2023-09-01 |
| 2 | Maria Chi | maria.chi@example.com | 2023-09-02 |
| 3 | Peter Ming | peter.ming@example.com | 2023-09-02 |
Configuration des droits d'accès
PostgreSQL doit avoir accès au fichier pour utiliser la commande COPY. Si les droits sont mal configurés, tu vas tomber sur des erreurs. Par exemple :
ERROR: could not open file "/var/lib/postgresql/data/students.csv" for reading: Permission denied
Pour éviter ce genre de souci, assure-toi de ça :
- Le fichier est lisible par l'utilisateur PostgreSQL. En général, c'est l'utilisateur
postgres. - Vérifie les droits sur le fichier et le dossier où il se trouve :
ls -l /var/lib/postgresql/data/students.csv
Si les droits sont pas bons, tu peux les changer :
chmod 644 /var/lib/postgresql/data/students.csv
chown postgres:postgres /var/lib/postgresql/data/students.csv
Ici on parle de Linux. La gestion des droits sous Windows se fait en général par un admin Windows et c'est hors du scope de notre cours.
Limitations de la commande COPY
Bosser avec COPY a quelques particularités importantes :
Chemin du fichier : mets toujours le chemin absolu, parce que PostgreSQL risque de pas comprendre les chemins relatifs.
Encodage du fichier : si ton CSV utilise un encodage différent de la base (genre Windows-1251 au lieu de UTF-8), faut préciser l'encodage voulu :
COPY students
FROM '/var/lib/postgresql/data/students.csv'
WITH (FORMAT CSV, ENCODING 'WIN1251', HEADER TRUE);
Erreurs de structure du fichier : si la structure du fichier colle pas avec celle de la table ou si les données sont foireuses (genre du texte dans une colonne numérique), le chargement va planter. Vérifie tes données avant de lancer le truc !
Utilisation pratique
Utiliser COPY pour charger des données depuis le serveur, ça sert à plein de trucs :
- Migration de données : tu peux déplacer de gros volumes de données entre serveurs ou bases.
- Intégration avec des systèmes externes : plein de systèmes exportent des données en CSV.
COPYpermet de charger ça vite fait dans PostgreSQL. - Préparation de rapports analytiques : le chargement auto des données depuis le serveur accélère l'analyse de gros volumes d'infos.
Erreurs courantes et comment les résoudre
En bossant avec COPY, tu peux tomber sur plusieurs erreurs :
Problème : Fichier inaccessible
Message d'erreur : could not open file for reading: Permission denied.
Solution : vérifie que le fichier est accessible par l'utilisateur PostgreSQL (postgres) et check les droits d'accès.
Problème : Mauvais format de fichier
Message d'erreur : malformed CSV line.
Solution : regarde s'il y a des lignes vides, des erreurs dans les données ou des caractères bizarres. Vérifie aussi que le séparateur est le bon.
Problème : Structure des données non conforme
Message d'erreur : ERROR: invalid input syntax for type integer.
Solution : assure-toi que les colonnes de la table correspondent à la structure des données du fichier. Par exemple, les données numériques doivent aller dans des colonnes numériques, et les dates dans des colonnes de type DATE.
Maintenant t'as tout ce qu'il faut pour utiliser COPY efficacement pour charger des données depuis le serveur. Utilise ces skills dans tes projets pour gagner du temps et booster ta productivité avec les bases de données.
GO TO FULL VERSION