PostgreSQL中的COPY函数

Jei*_*man 8 csv postgresql postgresql-copy

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

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

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

Erw*_*ter 17

看起来您对Linux与Windows文件路径表示法感到困惑.你有什么是一个锚定到root的Linux路径.Windows使用驱动器号,您在Windows上运行时也可以指定驱动器号.

如果使用Windows表示法,请注意如果不使用则必须转义反斜杠standard_conforming_strings = on - 这是Postgres 9.1或更高版本中的默认值,但在旧版本中不是.喜欢:

COPY data_table from E'C:\\tmp\\outputdata.csv' WITH ...
Run Code Online (Sandbox Code Playgroud)

有了standard_conforming_strings = on可以简单的写:

COPY data_table from 'C:\tmp\outputdata.csv' WITH ...
Run Code Online (Sandbox Code Playgroud)

请注意,PostgreSQL Windows服务器也可以使用斜杠而不是反斜杠来理解默认路径表示法.

对于SQL,COPY FROM / TO您可以使用服务器进程所有者(postgres默认情况下)具有读/写权限的任何路径.

对于\copypsql客户端的meta命令,应用当前本地用户的权限.

  • 不要在Windows计算机上使用带有pgAdmin的COPY命令,并尝试从本地Windows环境中读取文件.这将失败.无论如何,您可以导入csv文件.使用GUI来做到这一点.右键单击所需的表并选择导入... (3认同)

ale*_*oot 5

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

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

copy data_table from 'c:\\Temp\\outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';
Run Code Online (Sandbox Code Playgroud)