如何将CSV数据插入到PostgreSQL数据库(远程数据库)
如何将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 ','"
但是文件在本地服务器上,而数据库在另一个(远程)服务器上。
如果我尝试在远程服务器上执行此操作,使用以下命令:
psql -h remotehost -d remote_mydb -U myuser -c "copy mytable (column1, column2) from '/path/to/local/file.csv' with delimiter as ','"
我会收到一个权限被拒绝的异常。
如何在没有超级用户权限的情况下,将本地文件中的数据插入到远程服务器的数据库中?
问题的原因是:需要将CSV数据插入到远程的PostgreSQL数据库中。
解决方法是:使用STDIN将文件传输到数据库中。根据PostgreSQL的COPY文档,当指定了STDIN时,数据通过客户端和服务器之间的连接进行传输。
以下是解决方法的代码示例:
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'`具有相同的注意事项。服务器执行程序,而不是客户端。
根据PostgreSQL的COPY文档,当指定了PROGRAM时,服务器执行给定的命令,并从程序的标准输出读取数据,或将数据写入程序的标准输入。命令必须从服务器的视角指定,并且必须可以被PostgreSQL用户执行。
文章结束。