在PostgreSQL函数中运行带有参数的系统命令[英] Running system command with argument in a PostgreSQL function

本文是小编为大家收集整理的关于在PostgreSQL函数中运行带有参数的系统命令的处理方法,想解了在PostgreSQL函数中运行带有参数的系统命令的问题怎么解决?在PostgreSQL函数中运行带有参数的系统命令问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我不确定我是否在问题上是具体的,但是我很难创建一个运行Linux shell命令的Postgres函数,其中一个细节:这是插入后触发器中的一个函数,我需要使用一些NEW列.

在MySQL中,使用插件" mysql udf"非常简单,触发器像这样工作:

BEGIN
 DECLARE result int(10);
 SET result = sys_exec('/usr/bin/php /var/www/html/.../regras.php NEW.uniqueid NEW.linkedid NEW.eventtype');
END

但是在PostgreSQL上,我尝试了语言PL/SH,WICH可以运行任何shell脚本,所以我编写了以下功能:

   CREATE FUNCTION tarifador_func2() RETURNS TRIGGER
    LANGUAGE plsh
    AS $$
    #!/bin/sh
    /usr/bin/php /var/www/html/...regras.php NEW.uniqueid NEW.linkedid NEW.eventtype
   $$;

它确实以适当的方式执行.php文件,问题是语言不识别我作为参数作为PHP的NEW变量,因此在args[]中,我得到的是"NEW.uniqueid" ,"NEW.linkedid"和"NEW.eventtype".

那么,有人知道如何在PL/SH中正确使用NEW参数? 另一个可能的解决方案可能是通过对触发器的参数手动设置我需要的三个值,但是不允许在参数中使用NEW.

.

推荐答案

您可以访问plsh触发器中的一些值.

  • 更新仅提供旧
  • 插入仅提供新的(duh)
  • 删除我没有测试

因此,您可以使用参数获得这些值,例如$ 1,$ 2

您的功能看起来有点像这样:

CREATE FUNCTION tarifador_func2() RETURNS TRIGGER
LANGUAGE plsh
AS $$
#!/bin/sh
/usr/bin/php /var/www/html/...regras.php $3 $6 $1

$$;

请注意,我没有使用$1 $2 $3,那是因为plsh扩展转储所有列列入参数,以便在您的表中声明它们.因此,您可能会做INSERT INTO table1 (column3) VALUES (6);之类的事情,并且假设这是表中的第三列.

作为旁注,可以通过env vars提供触发的元数据.

据我所知,

其他推荐答案

您无法访问NEW和OLD元素pl/sh.

我将使用 pl/perl href =" https://www.postgresql.org/docs/current/current/static/plpython-trigger.html" rel =" nofollow noreferrer"> pl/python 为此

这是PL/Python中的一个示例:

CREATE OR REPLACE FUNCTION pytrig() RETURNS trigger
   LANGUAGE plpythonu AS
$$import os
os.system("/usr/bin/php /home/laurenz/hello.php '" + TD["new"]["val"] + "'")$$;

CREATE TABLE test (id integer PRIMARY KEY, val text);

CREATE TRIGGER pytrig AFTER INSERT ON test FOR EACH ROW
   EXECUTE PROCEDURE pytrig();

本文地址:https://www.itbaoku.cn/post/1763903.html