Postgres COPY TO PROGRAM 使用动态命令

Postgres COPY TO PROGRAM with dynamic command

我有命令要在插入 table event 后执行,命令是:

/usr/bin/php /var/www/app/artisan broadcast --sid=14 --cid=89

哪个数字 1489 是动态的,具体取决于插入的数据。

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

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

我这样创建触发器函数:

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 "||"

如果命令没有连接,这个触发器工作正常。我不知道如何在 COPY TO PROGRAM.

中将命令字符串与变量 NEW 连接起来

我的问题是如何在触发器中连接 COPY TO PROGRAM 中的字符串?

试试这个:

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