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
哪个数字 14 和 89 是动态的,具体取决于插入的数据。
为此,我创建了这样的触发器:
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);
我有命令要在插入 table event
后执行,命令是:
/usr/bin/php /var/www/app/artisan broadcast --sid=14 --cid=89
哪个数字 14 和 89 是动态的,具体取决于插入的数据。
为此,我创建了这样的触发器:
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);