【问题标题】:How to run a bat file from a plpgsql function如何从 plpgsql 函数运行 bat 文件
【发布时间】:2014-03-20 03:07:59
【问题描述】:

有没有办法从plpgsql 编写的函数中运行批处理文件?

【问题讨论】:

    标签: postgresql batch-file postgresql-9.1 plpgsql


    【解决方案1】:

    直接从 PL/PgSQL 是不可能的。

    您只能通过在 PL/Perlu 或 PL/Pythonu 等不受信任的 PL 中提供辅助函数来执行此操作,然后依次运行批处理文件。

    在 Python 中你会使用类似的东西:

    CREATE FUNCTION exec_system_cmd (command text)
      RETURNS return-type
    AS $$
      import os
      import sys
      os.system(command)
    $$ LANGUAGE plpythonu;
    

    或者你可以更复杂一点,使用subprocess模块来传递参数数组,这样你就不必担心在命令中转义%>和其他特殊字符-字符串。

    显然exec_system_cmd 应该只能由超级用户执行,如果可能,您应该编写一个更专业的函数,不允许用户运行他们喜欢的任何命令。

    虽然这是可能,但这并不是一个好主意。我同意 Erwin 的观点,最好有一个外部帮助程序使用 LISTENNOTIFY 在需要时运行命令。

    【讨论】:

      【解决方案2】:

      出于安全原因,没有直接的方式。
      查看LISTEN / NOITIFY 以触发数据库外的可执行文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-24
        • 2020-03-09
        • 1970-01-01
        • 2010-10-13
        • 2012-03-08
        • 2013-11-26
        • 1970-01-01
        相关资源
        最近更新 更多