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

14 浏览
0 Comments

如何将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 ','"

我会收到一个权限被拒绝的异常。

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

0
0 Comments

问题的出现原因是:在将CSV数据插入远程PostgreSQL数据库时,需要使用不同的命令来区分本地数据库和服务器(远程)数据库。

解决方法是:对于本地数据库,可以使用COPY TABLENAME FROM 'D:\xyz.csv' DELIMITER ',' CSV HEADER命令将CSV数据插入数据库。而对于服务器(远程)数据库,则需要在命令前添加反斜杠,即\COPY TABLENAME FROM 'D:\xyz.csv' DELIMITER ',' CSV HEADER

通过使用不同的命令,我们可以轻松地将CSV数据插入到本地数据库和远程数据库中。

0
0 Comments

问题的原因是:需要将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用户执行。

文章结束。

0
0 Comments

在将CSV数据插入到远程PostgreSQL数据库时,出现了以下问题:在Java代码中尝试使用上述方法时,出现了“\”语法错误。这是因为\copy是psql命令,不适用于其他上下文。解决方法是确保在指定分隔符时不要遗漏,并且如果数据中包含逗号,则使用CSV作为分隔符代替逗号。通过这种方法,可以成功将CSV数据插入到远程PostgreSQL数据库中。

0