PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Importazione CSV PostgreSQL dalla riga di comando

La soluzione nella risposta accettata funzionerà solo sul server e quando l'utente che esegue la query avrà i permessi per leggere il file come spiegato in questa risposta SO.

In caso contrario, un approccio più flessibile consiste nel sostituire COPY di SQL comando con il psql il "meta-comando" chiamato \copy che accetta tutte le stesse opzioni della COPIA "reale", ma viene eseguito all'interno del client (senza bisogno di ; alla fine):

psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv"

Come da documenti, il \copy comando:

Esegue una copia front-end (client). Questa è un'operazione che esegue un comando SQL COPY, ma invece di leggere o scrivere il file specificato, psql legge o scrive il file e instrada i dati tra il server e il file system locale. Ciò significa che l'accessibilità e i privilegi dei file sono quelli dell'utente locale, non del server, e non sono richiesti privilegi di superutente SQL.

Inoltre, se il the_file.csv contiene l'intestazione nella prima riga, può essere riconosciuta aggiungendo header alla fine del comando precedente:

psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv header"