如何使用 PgAdmin 将查询结果保存到文件中到终端

How to save query result to file using PgAdmin to terminal

提问人:aardwolf 提问时间:11/7/2023 更新时间:11/7/2023 访问量:40

问:

有没有办法在pgAdmin中编写一个脚本,将许多查询的结果保存到csv文件中? 就像查询 1 保存到 1 .csv 的结果一样,查询 2 到 2。CSV 等 我可以通过逐个运行查询并单击“另存为”来手动完成,但是如何在脚本中执行此操作?

我希望有许多包含查询结果的 csv 文件,但无需手动逐个单击,而是使用 PgAdmin 中的脚本。

PostgreSQL pgadmin

评论

0赞 Adrian Klaver 11/7/2023
使用 psql 和 .\pset format csv

答:

0赞 Pepe N O 11/7/2023 #1

您可以使用 COPY 命令完成此操作,如下所示:

COPY test TO '/home/someuser/results/test.csv' WITH (FORMAT CSV, HEADER);

将测试表的所有内容转换为 CSV 文件或查询

COPY (SELECT * FROM test WHERE id >1) TO '/home/someuser/results/test.csv' 
WITH (FORMAT CSV, HEADER);

该文件必须可由 PostgreSQL 用户(用户 ID 服务器运行方式),并且必须从 服务器。

这意味着 postgres 用户(运行 postgreSQL 进程的用户)必须对存储结果的文件夹具有写入权限,并且该文件夹或路径驻留在服务器端,该文件夹或路径适用于任何数据库管理器,而不仅仅是 pgAdmin。有关更多信息,请查看 COPY 的官方文档

要执行 COPY 命令,用户需要授予角色,但是,这是必要的,请考虑以下事项:pg_write_server_files

pg_read_server_files、pg_write_server_files和 pg_execute_server_program角色旨在允许管理员 具有能够访问的受信任但非超级用户的角色 文件并以数据库用户身份在数据库服务器上运行程序 运行方式。由于这些角色能够访问服务器文件上的任何文件 系统,它们在以下情况下绕过所有数据库级权限检查 直接访问文件,它们可用于获得 超级用户级别的访问,因此在以下情况下应格外小心 将这些角色授予用户。