Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Postgres COPY TO PROGRAM with dynamic command

I have command that I want to execute after insert in table event, the command is:

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

Which number 14 and 89 are dynamic depending on inserted data.

For that purpose, I create trigger like this:

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

And I create trigger function like this:

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;

That trigger produce error

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

This trigger work fine if the command not have concatenation. I do not know how to concatenate command string with variable NEW in COPY TO PROGRAM.

My question is how to concatenate string in COPY TO PROGRAM in trigger?

like image 387
Fathur Rohman Avatar asked Aug 01 '26 23:08

Fathur Rohman


1 Answers

Try this:

EXECUTE format('COPY (SELECT 1) TO PROGRAM ''/usr/bin/php /var/www/app/artisan broadcast --sid=%s --cid=%s'' ', NEW.sid, NEW.cid);
like image 85
Patrick Avatar answered Aug 03 '26 22:08

Patrick



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!