如何更改psql的有效用户?

时间:2010-05-06 10:51:52

标签: unix permissions postgresql

我正在使用psql运行文件中包含的一组简单的COPY语句:

psql -d mydb -f 'wbf_queries.data.sql'

其中wbf_queries.data.sql包含行:

copy <my_query> to '/home/gvkv/mydata' delimiter ',' null '';
...

但是我得到了一个拒绝权限错误:

... ERROR: could not open file ... for writing: Permission denied

我在我的用户帐户(gvkv)下连接,这也是PostgreSQL中的超级用户。显然,psql在不同(有效)的用户下运行,但我不知道如何更改它。可以在psql中完成,还是需要一些unix-fu?


更新:根据araqnid的回答,这里是来自其他任何人的相关信息:

\copy ...

执行前端(客户端)副本。这是一个运行SQL COPY命令的操作,但不是服务器读取或写入指定的文件,psql读取或写入文件并在服务器和本地文件系统之间路由数据。这意味着文件可访问性和权限是本地用户的权限,而不是服务器,并且不需要SQL超级用户权限。

更多here

1 个答案:

答案 0 :(得分:4)

您无法更改服务器进程的有效用户 - 只有root可以随意更改UNIX用户ID。 (澄清一下:如果你说copy to '/home/gvkv/mydata',服务器postgres进程将尝试编写该文件(运行为postgres / pgdba / whatever),而不是你的客户端psql(以你的身份运行)。)

然而,您可以让服务器将数据流传输到客户端,然后让客户端使用客户端\ copy命令来编写它,即:。

\copy <copy-source> to '/home/gvkv/mydata' delimiter ',' null ''

psql会将此转换为“COPY TO STDOUT”命令,然后自己编写/home/gvkv/mydata。这样可以安全地传输安全域中的数据,但当然它的价格要贵一些。