首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将PostgreSQL的PL / pgSQL输出保存为CSV文件?

将PostgreSQL的PL / pgSQL输出保存为CSV文件?

提问于 2017-12-20 10:25:32
回答 2关注 0查看 1.1K

"如果想要一些容易重用或自动化的东西,可以使用Postgresql内置的COPY命令。例如

Copy (Select * From foo) To '/tmp/test.csv' With CSV DELIMITER ',';

这种方法完全在远程服务器上运行,不能写入本地PC。它还需要作为Postgres“超级用户”(通常称为“root”)运行,因为Postgres无法阻止它使用该机器的本地文件系统做恶心的事情。

这实际上并不意味着你必须以超级用户的身份进行连接(自动化,这将是另一种安全风险),因为你可以使用这个SECURITY DEFINER选项CREATE FUNCTION来创建一个像超级用户一样运行的功能。

关键的一点是,你的函数是在那里执行额外的检查,而不仅仅是绕过安全 - 所以你可以编写一个函数,导出你需要的确切数据,或者你可以写一些东西,可以接受各种选项,只要他们遇到一个严格的白名单。你需要检查两件事情:

应该允许用户在磁盘上读写哪些文件?例如,这可能是一个特定的目录,文件名可能必须有一个合适的前缀或扩展名。

用户能够在数据库中读/写哪些表?这通常由GRANT数据库中的s 定义,但是该函数现在以超级用户的身份运行,所以通常是“越界”的表将被完全访问。你可能不想让别人调用你的函数,并在你的“用户”表的最后添加行..."

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档