如何更改psql的有效用户?

3

我正在使用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技巧?


更新:根据araqnid的答案,以下是相关信息,供其他人参考:

\copy ...

执行前端(客户端)复制。这是运行SQL COPY命令的操作,但是与服务器读取或写入指定文件不同,psql读取或写入该文件并在服务器和本地文件系统之间路由数据。这意味着文件可访问性和权限属于本地用户,而不是服务器,并且不需要SQL超级用户权限。
更多信息在此处
1个回答

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。这样可以安全地跨安全域传输数据,尽管当然会更加昂贵。


+1 用于建立区别:一个是客户端(psql进程,与服务器无关,有自己的Unix用户,甚至可能有自己的计算机),另一个是服务器(Postgres服务器进程-也称为postmaster)。您必须问自己哪个应该访问文件系统。 - leonbloy

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