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

jgzswidk  于 2022-12-15  发布在  PostgreSQL
关注(0)|答案(3)|浏览(223)

我有一个CSV文件。如果文件和数据库在同一台服务器上,我可以使用下面的命令将数据插入数据库:

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

但文件在本地服务器上,而数据库在另一台(远程)服务器上。
如果我尝试为远程服务器执行此操作,请使用以下命令:

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

我得到一个权限被拒绝的异常。
在没有超级用户权限的情况下,如何将数据从本地文件插入到远程服务器上的数据库中?

mmvthczy

mmvthczy1#

psql\copy(注意反斜杠)允许您向/从远程数据库进行复制,并且不需要超级用户权限。

psql \
  -h $hostname -d $dbname -U $username \
  -c "\copy mytable (column1, column2)  from '/path/to/local/file.csv' with delimiter as ','"

https://www.postgresql.org/docs/current/sql-copy.html

wecizke3

wecizke32#

您可以通过STDIN输入文件。从PostgreSQL COPY documentation ...
当指定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

我使用FROM PROGRAM是不正确的。它和FROM 'filename'有相同的警告。服务器执行程序,而不是客户机。
当PROGRAM被指定时,* 服务器执行给定的命令 *,并从程序的标准输出读取,或写入程序的标准输入。命令必须从服务器的Angular 指定,并且可由PostgreSQL用户执行。

kpbwa7wx

kpbwa7wx3#

对于本地数据库,只需用途:

COPY TABLENAME FROM 'D:\xyz.csv' DELIMITER ',' CSV HEADER

对于服务器(远程数据库),您必须添加\:

\COPY TABLENAME FROM 'D:\xyz.csv' DELIMITER ',' CSV HEADER

相关问题