Postgres使用动态命令复制到PROGRAM

时间:2017-03-06 12:53:37

标签: postgresql triggers command

我有一个命令,我想在表/usr/bin/php /var/www/app/artisan broadcast --sid=14 --cid=89 中插入后执行,命令是:

CREATE TRIGGER insert_event 
AFTER INSERT ON event 
FOR EACH ROW 
EXECUTE PROCEDURE call_artisan_broadcast();

根据插入的数据,哪个数字 14 89 是动态的。

为此,我创建了这样的触发器:

CREATE OR REPLACE FUNCTION call_artisan_broadcast()
RETURNS TRIGGER AS
$BODY$
  BEGIN

    COPY (SELECT 1) TO PROGRAM '/usr/bin/php /var/www/app/artisan broadcast --sid='||NEW.sid||' --cid='||NEW.cid;
    RETURN NEW;
  END
$BODY$

LANGUAGE plpgsql VOLATILE;

我创建了这样的触发器功能:

[42601] ERROR: syntax error at or near "||"

该触发器产生错误

NEW

如果命令没有连接,则此触发器可以正常工作。我不知道如何在 COPY TO PROGRAM 中将命令字符串与变量COPY TO PROGRAM连接起来。

我的问题是如何在触发器中连接.wrapper { display: flex; flex-direction: column; min-height: 100vh; border: 1px solid black; } .body { flex: 1 0 300px; } body { margin: 0; } * { box-sizing: border-box; }中的字符串?

1 个答案:

答案 0 :(得分:3)

试试这个:

EXECUTE format('COPY (SELECT 1) TO PROGRAM ''/usr/bin/php /var/www/app/artisan broadcast --sid=%s --cid=%s'' ', NEW.sid, NEW.cid);