如何将CSV数据插入PostgreSQL数据库(远程数据库)

Spi*_*ike 20 csv postgresql

我有一个CSV文件.如果文件与数据库位于同一服务器上,我可以使用下面的命令将数据插入数据库:

psql -h localhost -d local_mydb -U myuser -c "copy mytable (column1, column2)  from '/path/to/local/file.csv' with delimiter as ','"
Run Code Online (Sandbox Code Playgroud)

但该文件位于本地服务器上,而该数据库位于另一台(远程)服务器上.

如果我尝试为远程服务器执行此操作,请使用以下命令:

psql -h remotehost -d remote_mydb -U myuser -c "copy mytable (column1, column2)  from '/path/to/local/file.csv' with delimiter as ','"
Run Code Online (Sandbox Code Playgroud)

我得到了一个被许可拒绝的例外.

如何在没有超级用户权限的情况下将数据从本地文件插入远程服务器上的数据库?

Nei*_*gan 29

\copy (注意反斜杠)允许您复制到远程数据库或从远程数据库复制,并且不需要超级用户权限.

psql -h remotehost -d remote_mydb -U myuser -c "\copy mytable (column1, column2)  from '/path/to/local/file.csv' with delimiter as ','"
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Java,则可以使用JDBC驱动程序中的CopyManager:https://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html


Sch*_*ern 17

您可以通过STDIN提供文件.从PostgreSQL COPY文档 ......

指定STDIN或STDOUT时,数据通过客户端和服务器之间的连接传输.

psql -h remotehost -d remote_mydb -U myuser -c \
    "copy mytable (column1, column2) from STDIN with delimiter as ','" \
    < /path/to/local/file.csv
Run Code Online (Sandbox Code Playgroud)

我对使用不正确FROM PROGRAM.它有同样的警告FROM 'filename'.服务器执行程序,而不是客户端.

指定PROGRAM时,服务器执行给定的命令并从程序的标准输出读取,或写入程序的标准输入.必须从服务器的角度指定该命令,并且该命令可由PostgreSQL用户执行.