I ask this question in light of the following trigger producing this error:
ERROR: syntax error at or near "(" LINE 5: ...cessBlogPostApproval"('Blog Post Approval', concat('Your blo... ^
The trigger in question:
CREATE TRIGGER "processBlogPostApproval_AFTER_INSERT" AFTER INSERT ON public."ApprovedBlogPosts" FOR EACH ROW EXECUTE PROCEDURE public."processBlogPostApproval"('Blog Post Approval', concat('Your blog post, "', SELECT "Title" FROM public."BlogPosts" WHERE "PostID" == NEW."PostID", '"has been approved.'));
The problem seems to be arising due to the fact that I passed a concatenation function as my second argument, or rather, that I did not pass it correctly. Would appreciate your assistance in identifying which of the two is the cause of the problem.
Advertisement
Answer
Sometimes it turns out the easiest/cleanest way to do something is — well not to do it. This seems to be the case here. The issue you are having deal with passing a message into a trigger function, that getting it properly formatted. Well since a trigger function must defined without parameters.
A trigger procedure is created with the CREATE FUNCTION command, declaring it as a function with no arguments and a return type of trigger.
Don’t do it. Build the message in the trigger function. It actually makes the code there easier (IMO). You didn’t provide much detail so just a minimal example:
-- setup create table approved_blog_posts( id integer ) ; create table blog_posts(id integer, title text) ; insert into blog_posts( id, title) values (1 ,'Blog Rant') , (2 ,'Still Rant again') , (3 ,'Rambling about nut''en!'); -- trigger function create or replace function blog_post_approved() returns trigger language plpgsql as $$ declare l_title text; begin select title into l_title from blog_posts where id = new.id; raise notice 'Your blog post "%" has been approved.',l_title; return new; end; $$; -- attach trigger to table create trigger approved_blog_posts_air after insert on approved_blog_posts for each row execute procedure blog_post_approved(); -- demo/test insert into approved_blog_posts(id) values (1),(3);