微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 在PostgreSQL函数中使用参数运行系统命令

我不确定我是否具体在问题中,但是我在创建运行Linux shell命令的Postgres函数时遇到了一个问题,其中有一个细节:它是插入后触发器中的一个函数,我需要使用一些新列.

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语言,它可以运行任何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参数提供的新变量,所以在args []中我得到的是“NEW.uniqueid”,“NEW .linkedid“和”NEW.eventtype“.

所以,任何人都知道如何在PL / sh中正确使用NEW参数?
另一种可能的解决方案可能是通过创建触发器的参数手动设置我需要的三个值,但是不允许在参数中使用NEW.

解决方法:

您可以在plsh触发器中访问某些值.

> UPDATE仅提供OLD
> INSERT仅提供NEW(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);假设这是表中的第三列,它将在plsh中低于3美元.

作为旁注,触发器的元数据可通过env vars获得.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐