PostgreSQL中的COPY函数

11
我想使用PostgreSQL中的COPY功能将CSV文件导入到PostgreSQL数据库中。
documentation中提到的文件名,CSV文件必须存储在特定位置还是可以存储在任何位置?
例如:copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';。其中tmp表示C:驱动器中的tmp文件夹。它可以更改为另一个文件夹名称吗?
2个回答

19
似乎您对Linux和Windows文件路径表示法感到困惑。您的路径是一个以根目录为锚点的Linux路径。在Windows上运行时,可以同样指定驱动器号码,因为Windows使用驱动器号码。
如果您使用Windows表示法,请注意,如果未使用standard_conforming_strings = on(这是Postgres 9.1或更高版本的默认设置,但不适用于旧版本),则必须转义反斜杠。例如:
COPY data_table from E'C:\\tmp\\outputdata.csv' WITH ...

通过启用 standard_conforming_strings = on,您可以简单地编写:

COPY data_table from 'C:\tmp\outputdata.csv' WITH ...

请注意,PostgreSQL Windows 服务器也可以理解斜杠而不是反斜杠的默认路径表示法。
对于 SQL COPY FROM / TO,您可以使用任何拥有服务器进程(默认为 postgres)读取/写入权限的路径。
对于 psql 客户端的 \copy 元命令,适用当前本地用户的权限。

3
不要在 Windows 机器上使用 pgAdmin 的 COPY 命令并尝试从本地的 Windows 环境中读取文件,这将会失败。不过你仍然可以导入 CSV 文件,使用 GUI 来完成操作。右键点击所需的表格,选择导入... - R13e

6

当然可以指定您有读取权限的任何位置。更改文件路径没有问题。

只需注意,在Windows上,必须以以下方式转义反斜杠:

copy data_table from 'c:\\Temp\\outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接