PostgreSQL中的COPY函数

时间:2012-04-09 20:49:59

标签: postgresql csv postgresql-copy

我想使用PostgreSQL中的COPY函数将CSV文件导入PostgreSQL数据库。

如果它在documentation中显示文件名,则CSV文件是否必须存储在特定位置,还是可以存储在任何位置。

例如,copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';。它显示tmp,这是否意味着C:驱动器中的tmp文件夹。是否可以更改为其他文件夹名称?

2 个答案:

答案 0 :(得分:16)

看起来您对Linux与Windows文件路径表示法感到困惑。你有什么是一个锚定到root的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元命令,当前本地用户的权限适用。

答案 1 :(得分:5)

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

请注意以下事实:在Windows上你必须以这种方式逃避反斜杠:

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