2017-03-06 142 views
3

我的命令,我想在表event插入後,執行程序,命令爲:Postgres的COPY TO動態命令

/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(); 

我創建觸發器的功能是這樣的:

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

這觸發工作很好,如果命令沒有串聯。我不知道如何連接命令字符串與變量NEWCOPY TO PROGRAM

我的問題是如何連接在COPY TO PROGRAM觸發器中的字符串?

回答

3

試試這個:

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

可惜,這不行,這是產生錯誤'42601]錯誤:在或接近「FORMAT」' –

+1

@FathurRohman在命令需要一個字符串字面這種情況下,語法錯誤。您可以嘗試在「EXECUTE」命令中包裝整個語句。查看更新的答案。 – Patrick

+0

完美工作,謝謝@Patrick –