【问题标题】:Can a PostgreSQL stored procedure call an external program?PostgreSQL 存储过程可以调用外部程序吗?
【发布时间】:2015-07-08 00:31:52
【问题描述】:

我正在查看 PostgreSQL "Server Programming" 文档以编写存储过程。我想让一个存储过程调用现有的外部 shell 脚本来执行任务,然后返回结果。

我在文档中没有找到这个。支持吗?

【问题讨论】:

  • 我想我明白了。我只是在看 PL/pgSQL。现在我正在使用 PL/Perl,希望我能找到类似于 system(...) 的东西。
  • 提示:交易...
  • @wildplasser 交易与问题有什么关系?

标签: postgresql stored-procedures


【解决方案1】:

这是我在 Ubuntu 上的做法。请注意,安装 PostgreSQL 时默认不安装 plperl。

> sudo apt-get install postgresql-plperl
> sudo --user=postgres psql my_database

# CREATE EXTENSION IF NOT EXISTS plperlu;
# CREATE OR REPLACE FUNCTION foo() RETURNS TEXT AS $$
    return `/bin/echo -n "hello world!"`;
    $$ LANGUAGE plperlu;

# select foo();
     foo
-------------
 hello world!
(1 row)

【讨论】:

    【解决方案2】:

    像 PL/perlu 或 PL/Pythonu 这样的“不受信任”的 PL 可以,C 用户定义的函数也可以。

    不过,这通常不是一个好主意。如果您调用外部程序然后回滚事务,则外部程序将不知道回滚。您正在脱离事务管理。

    通常最好使用NOTIFY 将工作发送到已连接的守护进程,并使用LISTENing 发送事件。

    【讨论】:

      【解决方案3】:

      是的,它可以,但不是每个 SP 都能做到。 PL/pgSQL 等受信任语言中的存储过程无法做到这一点。 Please refer to this 选择您不受信任的语言。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-03
        • 1970-01-01
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        相关资源
        最近更新 更多