我在 CentOS 7 上使用 Postgres 14。我想导出单个表的数据,但我没有超级用户权限。不出所料,我收到了这个错误
myapp=> COPY myapp_currencyprice to '/tmp/prices.csv' DELIMITER ',' CSV HEADER;
ERROR: must be superuser or a member of the pg_write_server_files role to COPY to a file
HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
对于没有超级用户权限的用户,导出表数据(用于稍后导入)的正确方法是什么?
COPY ... TO <file>
在服务器上创建输出文件,除了需要提升的权限外,在许多情况下也没有用,因为不是每个人都可以访问服务器文件系统。错误消息后显示的提示建议了两种在客户端上创建输出文件的替代方案。这些替代品实际上是一个,只是包装不同。
一是
COPY ... TO STDOUT
;这会将查询输出发送到客户端,并结合\g <file>
psql
元命令将其重定向到指定的文件。例如:另一种选择是使用
\copy
meta-command,它做同样的事情,但应该使用以下\pset
语法指定选项: