Sono abbastanza sicuro che ognuno di noi si è trovato in una situazione in cui è necessario generare un rapporto e/o estrarre alcuni dati da un database e presentarli in un foglio elettronico. In molti casi, i nostri clienti preferiscono Excel per gestire fogli/report diffusi, perché, duh, è Excel.
Quindi, come affrontate questo problema? Copiate e incollate i dati? O usi una GUI del DBMS per generare il rapporto in un foglio di calcolo? Oggi, vi mostrerò una piccola ma comoda caratteristica di PostgreSQL -COPY.
Ciao COPY#
Dalla documentazione di COPY: “COPY sposta i dati tra le tabelle PostgreSQL e i file del sistema di file standard. COPY TO copia il contenuto di una tabella in un file, mentreCOPY FROM copia i dati da un file a una tabella (aggiungendo i dati a ciò che è già presente nella tabella). COPY TO può anche copiare i risultati di una query SELECT.”
Quindi, cosa fa COPY:
- Può copiare il contenuto di un file (dati) in una tabella, o
- può copiare il contenuto di una tabella (o il risultato di una query SELECT) in un file.
Se viene specificato un elenco di colonne, COPY copierà solo i dati nelle colonne specificate nel o dal file. Se ci sono colonne nella tabella che non sono nella lista delle colonne, COPY FROM inserirà i valori di default per quelle colonne.
COPY con un nome di file istruisce il server PostgreSQL a leggere direttamente da o scrivere su un file. Il file deve essere accessibile al server e il nome deve essere specificato dal punto di vista del server. Quando viene specificato STDIN o STDOUT, i dati vengono trasmessi attraverso la connessione tra il client e il server.
Suona bene? Proviamo!
Disclaimer: COPY ha la capacità di leggere/scrivere dati da/a file CSV e binari. Anche se sono sicuro che ci sono molti casi d’uso per l’utilizzo di file binari, in questo blogpost mi concentrerò solo sul suo utilizzo per i file CSV perché, personalmente per me, sono i più convenienti per gestire le serie di dati.
COPY TO#
Quando volete creare un file CSV da una query SELECT, o scaricare tutti i contenuti di una tabella in un file CSV, potete usare il comando “COPY … TO …”.
Utilizzando una query SELECT#
Quando volete copiare un set di risultati in un file CSV, il formato del comando COPY è:
|
|
O, un esempio più reale:
|
|
Come potete vedere, usiamo il comando COPY che copia i risultati in un file CSV sul filesystem locale. È possibile portare la query molto più avanti. Ecco un esempio di vita reale di un progetto a cui sto lavorando:
|
|
Come potete vedere, potete usare qualsiasi query SELECT che possa restituire un set di dati. 🙂
|
|
Aggiungere la parola chiave HEADER alla fine includerà le intestazioni nel file CSV, che sono i nomi delle colonne della tabella.
Anche un’altra caratteristica chiave dei file CSV sono i delimitatori. A seconda del delimitatore di carattere che volete che il file CSV abbia, potete specificare il carattere nel comando:
|
|
Utilizzando il nome di una tabella#
Quando volete che un’intera tabella sia scaricata in un CSV, il comando è molto più semplice. Basta specificare il nome della tabella e il file di destinazione:
|
|
È tutto.
COPY FROM#
Ora, quando volete iniettare i dati dal file CSV in una tabella, potete usare il comando “COPY … FROM …”. La sintassi è molto simile, con una sola chiave di differenza:
|
|
O, usando un esempio di vita reale:
|
|
Outro#
COPY è una caratteristica davvero pulita e interessante di Postgres. Per brevità, ho cercato di mantenere questo blogpost breve e semplice. Se avete pensieri e domande, sentitevi liberi di lasciarmi un commento. Oppure, se non vi sentite chiacchieroni, potete andare alla documentazione COPY.
Vi è piaciuto questo articolo? Iscriviti alla mia newsletter e ricevi i miei post freschi nella tua casella di posta. È breve e dolce, e viene inviata mensilmente a più di 1.000 abbonati.