有没有一种方法可以在pgAdmin中编写一个脚本,将保存一些查询的结果保存到csv文件中?比如查询1的结果保存到1.csv,查询2保存到2.csv等。我可以通过逐个运行查询并单击“保存为”手动完成,但如何在脚本中完成?我希望一些包含查询结果的csv文件,但不需要手动逐个单击,而是使用PgAdmin中的脚本。
yqkkidmi1#
您可以使用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)访问,并且必须从服务器的Angular 指定名称。这意味着postgres用户(运行PostgreSQL进程的用户)必须对存储结果的文件夹具有写入权限,并且该文件夹或路径位于服务器端,可以与任何数据库管理器一起使用,而不仅仅是pgAdmin。有关更多信息,请查看official docs for COPY。要执行COPY命令,用户需要授予角色pg_write_server_files,但必须考虑以下因素:pg_read_server_files、pg_write_server_files和pg_execute_server_program角色旨在允许管理员拥有受信任但非超级用户的角色,这些角色能够以数据库运行用户的身份访问数据库服务器上的文件和运行程序。由于这些角色能够访问服务器文件系统上的任何文件,它们在直接访问文件时绕过所有数据库级别的权限检查,并且可用于获得超级用户级别的访问权限,因此在向用户授予这些角色时应非常小心。
pg_write_server_files
1条答案
按热度按时间yqkkidmi1#
您可以使用COPY命令来完成此操作,如下所示:
字符串
将测试表的所有内容转换为一个csv文件,或一个查询
型
该文件必须可由PostgreSQL用户(运行服务器的用户ID)访问,并且必须从服务器的Angular 指定名称。
这意味着postgres用户(运行PostgreSQL进程的用户)必须对存储结果的文件夹具有写入权限,并且该文件夹或路径位于服务器端,可以与任何数据库管理器一起使用,而不仅仅是pgAdmin。有关更多信息,请查看official docs for COPY。
要执行COPY命令,用户需要授予角色
pg_write_server_files
,但必须考虑以下因素:pg_read_server_files、pg_write_server_files和pg_execute_server_program角色旨在允许管理员拥有受信任但非超级用户的角色,这些角色能够以数据库运行用户的身份访问数据库服务器上的文件和运行程序。由于这些角色能够访问服务器文件系统上的任何文件,它们在直接访问文件时绕过所有数据库级别的权限检查,并且可用于获得超级用户级别的访问权限,因此在向用户授予这些角色时应非常小心。