Postgres COPY到CSV

时间:2015-02-03 19:23:02

标签: sql postgresql

我正在尝试使用csv中的COPY命令将查询导出到pgAdminIII文件。

我正在使用此命令:

COPY (SELECT CASE WHEN cast(click as int) = 1 THEN 1
    ELSE -1
    END
    || ' '
    || id
    || '|'
    || 'hr_' || substring(hour, 7,8)
    --|| ' dw_x' + substring(datename(dw, substring(hour,1,6) ),1,2)
    || ' |dw_' || substring(to_char(to_date(substring(hour, 1,6),'YYMMDD'), 'dy'),1,2)
    || ' |C1_' || c1
    || ' |C21_' || c21
    || ' |C22_' || substring(to_char(to_date(substring(hour, 1,6),'YYMMDD'), 'dy'),1,2) || '_' || substring(hour, 7,8)
    AS COL1    
  FROM clickthru.train limit 10)     
  TO 'C:\me\train.csv' with csv;

当我跑步时,我得到:

ERROR: could not open file "C:\me\train.csv" for writing: Permission denied
SQL state: 42501

然后我尝试在psql中使用以下内容:

grant all privileges on train to public

然后使用\ z查看访问权限,返回:

enter image description here

但我仍然得到同样的错误。我在Windows 7机器上使用postgresql 9.4。还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

copy将文件写入Postgrs 服务器进程的用户帐户下(这是服务器端操作)。

From the manual:

  

PostgreSQL用户必须可以访问该文件(服务器运行的用户ID),并且必须从服务器的角度指定名称

在Windows下,默认情况下这是系统的“网络帐户”。

显然该帐户对该目录没有写权限。

您有两种可能的解决方法:

  1. 更改目录上的权限以允许每个人完全访问
  2. 使用客户端\copy命令(在psql中)而不是