PostgreSQL CSV import from command line

前端 未结 4 1789
予麋鹿
予麋鹿 2020-12-13 09:15

I\'ve been using the psql Postgres terminal to import CSV files into tables using the following

COPY tbname FROM
\'/tmp/the_file.csv\'
delimiter \'|\' csv;
<         


        
4条回答
  •  醉话见心
    2020-12-13 09:34

    The solution in the accepted answer will only work on the server and when the user executing the query will have permissions to read the file as explained in this SO answer.

    Otherwise, a more flexible approach is to replace the SQL's COPY command with the psql's "meta-command" called \copy which which takes all the same options as the "real" COPY, but is run inside the client (with no need for ; at the end):

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

    As per docs, the \copy command:

    Performs a frontend (client) copy. This is an operation that runs an SQL COPY command, but instead of the server reading or writing the specified file, psql reads or writes the file and routes the data between the server and the local file system. This means that file accessibility and privileges are those of the local user, not the server, and no SQL superuser privileges are required.


    In addition, if the the_file.csv contains the header in the first line, it can be recognized by adding header at the end of the above command:

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

提交回复
热议问题