使用 PostgreSQL 将 .sql 文件读入磁盘

Posted

技术标签:

【中文标题】使用 PostgreSQL 将 .sql 文件读入磁盘【英文标题】:Read .sql files to disk with PostgreSQL 【发布时间】:2017-02-06 00:25:27 【问题描述】:

有没有办法读取存储在磁盘文件夹中的文件名并通过扩展名过滤? 这可以用 sql server 来做,但现在我需要用 postgresql 来做。 我等待你的建议。谢谢。

这与sql server一起使用:

EXECUTE master.dbo.xp_cmdshell 'dir /b "C:\Folder_Scripts\*.sql"'

【问题讨论】:

使用psql有什么问题? 请说明你想要什么。该文件是您要执行的 SQL 脚本吗?文件是在客户端机器上还是在服务器机器上?您希望在哪个编程环境或使用哪个客户端程序来完成任务。 不,我尝试做的是从带有 pl / sql 的 Postgresql 中读取脚本文件 .sql,其中第一个脚本的名称必须与数据库中的函数进行比较,如果名称存在则应该重命名它然后执行它,但是它存在于数据库中只是应该执行它。如果我需要从客户端机器上运行它。 @Laurenz Albe 【参考方案1】:

您的描述和评论不太清楚,但我推测您想重命名磁盘上的 SQL 脚本文件,打开它们并从 PL/pgSQL 函数中执行包含的 SQL 语句。

这不是 PL/pgSQL 擅长的,但这里有你需要的工具:

有标准的SQL functions for reading files,它需要超级用户权限,所以你需要一个由超级用户拥有的函数,它以SECURITY DEFINER 运行。

adminpack contrib 模块中有SQL functions to write files,同样需要超级用户权限。

您可以使用EXECUTE statement 执行包含一条 SQL 命令(或多个 SQL 命令,以分号分隔)的字符串。

可以在SQL标准视图information_schema.routines中找到数据库中定义的函数。

如果您需要进行大量字符串处理,您可能会发现 PL/pgSQL 有点笨拙。在这种情况下,请考虑使用PL/Perl。

【讨论】:

碰巧版本更新的时候,往往有50多个Store Procedure,手动做的过程很长。这个想法是在它存在的情况下生成一个备份,如果不直接运行它。我不明白你的建议:( 好吧,我不明白你的问题。让我们放弃吧;我们试过了。

以上是关于使用 PostgreSQL 将 .sql 文件读入磁盘的主要内容,如果未能解决你的问题,请参考以下文章

将SAS读入文件转换为SQL

Spark-SQL:如何将 TSV 或 CSV 文件读入数据框并应用自定义模式?

使用pgAdmin3将postgreSQL中的数据导出insert格式的sql文件

使用命令行参数运行 PostgreSQL .sql 文件

sql 将postgreSQL查询的输出重定向到文件

将 PostgreSQL SQL 转储转换为 PostgreSQL 自定义格式转储