Quando i tuoi dati sono già sul server, puoi usare il comando COPY per caricarli nelle tabelle di PostgreSQL. È super utile soprattutto se lavori con tanti dati o se il tuo server PostgreSQL gira su una macchina separata.
Il comando COPY eseguito lato server è davvero comodo nei progetti reali. Prima di tutto, è molto più veloce perché i file sono già sul server e non serve trasferirli in rete. Questo rende anche il processo più sicuro: non devi copiare i dati dal tuo computer locale, quindi meno rischi di leak. Inoltre, il caricamento si può facilmente integrare in script server-side automatizzati o servizi in background — tipo quando aggiorni regolarmente tabelle analitiche.
Sintassi del comando COPY
Il comando COPY è semplice, ma ci sono alcune cose chiave da ricordare:
COPY table_name
FROM '/path/to/file.csv'
WITH (FORMAT CSV, HEADER TRUE);
table_name— il nome della tabella dove vuoi caricare i dati./path/to/file.csv— percorso completo al file sul server.- Le opzioni
WITHti permettono di specificare il formato del file, la presenza di header, separatori e molto altro.
Esempio di utilizzo del comando COPY
Vediamo un esempio semplice. Supponiamo che tu debba caricare un file CSV con dati sugli studenti nel database PostgreSQL. Il file si trova sul server in /var/lib/postgresql/data/students.csv.
Passo 1. Tabella per i dati
Prima assicuriamoci che nel database ci sia una tabella dove caricare i dati:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
registration_date DATE
);
Questa tabella conterrà i dati degli studenti: nome, email e data di registrazione.
Passo 2. File CSV
Ecco come potrebbe essere il file /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
Passo 3. Comando COPY
Ora possiamo usare COPY per caricare i dati dal file nella tabella:
COPY students
FROM '/var/lib/postgresql/data/students.csv'
WITH (FORMAT CSV, HEADER TRUE);
Qui:
FORMAT CSVdice a PostgreSQL che il file è in formato CSV.HEADER TRUEsignifica che la prima riga del file contiene gli header delle colonne.
Dopo aver eseguito il comando, i dati dal file riempiranno la tabella students.
Verifica del risultato
Dopo aver caricato i dati, assicurati che tutto sia andato bene:
SELECT * FROM students;
Vedrai le righe dal file caricate nella tua tabella:
| 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 |
Configurazione dei permessi
PostgreSQL deve avere accesso al file per usare il comando COPY. Se i permessi non sono settati bene, ti becchi degli errori. Per esempio:
ERROR: could not open file "/var/lib/postgresql/data/students.csv" for reading: Permission denied
Per evitare questi problemi, controlla che:
- Il file sia leggibile dall'utente PostgreSQL. Di solito è l'utente
postgres. - Controlla i permessi del file e della cartella dove si trova:
ls -l /var/lib/postgresql/data/students.csv
Se i permessi non bastano, puoi cambiarli così:
chmod 644 /var/lib/postgresql/data/students.csv
chown postgres:postgres /var/lib/postgresql/data/students.csv
Qui parliamo di Linux. La configurazione dei permessi su Windows di solito la fa l'amministratore Windows e va oltre il nostro corso.
Limitazioni del comando COPY
Lavorare con COPY ha alcune particolarità da tenere a mente:
Percorso del file: usa sempre il percorso assoluto, perché PostgreSQL potrebbe non capire i percorsi relativi.
Codifica del file: se il file CSV usa una codifica diversa dal database (tipo Windows-1251 invece di UTF-8), devi specificare la codifica giusta:
COPY students
FROM '/var/lib/postgresql/data/students.csv'
WITH (FORMAT CSV, ENCODING 'WIN1251', HEADER TRUE);
Errori di struttura del file: se la struttura del file non corrisponde a quella della tabella o i dati sono sbagliati (tipo testo in un campo numerico), il caricamento fallisce con errore. Controlla i dati prima di caricare!
Applicazioni pratiche
Usare COPY per caricare dati dal server ha un sacco di usi:
- Migrazione dati: puoi spostare grandi quantità di dati tra server o database.
- Integrazione con sistemi esterni: tanti sistemi esportano dati in file CSV.
COPYti permette di caricare questi dati in PostgreSQL in un attimo. - Preparazione di report analitici: il caricamento automatico dei dati dal server velocizza l'analisi di grandi moli di informazioni.
Errori tipici e come risolverli
Lavorando con COPY, potresti incontrare vari errori:
Problema: File non disponibile
Messaggio di errore: could not open file for reading: Permission denied.
Soluzione: assicurati che il file sia accessibile all'utente PostgreSQL (postgres) e controlla i permessi.
Problema: Formato file non valido
Messaggio di errore: malformed CSV line.
Soluzione: controlla il file per righe vuote, errori nei dati o caratteri strani. Assicurati che il separatore sia quello giusto.
Problema: Struttura dati non corrispondente
Messaggio di errore: ERROR: invalid input syntax for type integer.
Soluzione: assicurati che le colonne della tabella corrispondano alla struttura dei dati nel file. Per esempio, i dati numerici devono andare nelle colonne numeriche e le date in colonne di tipo DATE.
Ora hai tutte le conoscenze che ti servono per usare COPY in modo efficace per caricare dati dal server. Usa queste skill nei tuoi progetti per risparmiare tempo e lavorare meglio con i database.
GO TO FULL VERSION