无需超级用户权限即可导出 Postgres 数据

Dav*_*ave 2 postgresql export table

我在 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.
Run Code Online (Sandbox Code Playgroud)

对于没有超级用户权限的用户导出表数据(用于稍后导入)的正确方法是什么?

mus*_*cio 6

COPY ... TO <file>在服务器上创建输出文件,除了需要提升权限之外,在许多情况下并没有什么用处,因为并非每个人都可以访问服务器文件系统。

错误消息后显示的提示建议了两种在客户端上创建输出文件的替代方案。这些替代方案实际上是一种,只是包装方式不同。

一是COPY ... TO STDOUT;这会将查询输出发送到客户端,并结合\g <file> psql元命令将其重定向到指定的文件。例如:

myapp=> COPY myapp_currencyprice to STDOUT WITH (DELIMITER ',', FORMAT CSV, HEADER) \g /tmp/prices.csv

Run Code Online (Sandbox Code Playgroud)

另一种选择是使用\copy元命令,它执行相同的操作,但应使用以下\pset语法指定选项:

\copy myapp_currencyprice to '/tmp/prices.csv' with (DELIMITER ',', FORMAT CSV, HEADER)
Run Code Online (Sandbox Code Playgroud)