Иногда оказывается, что самый простой / чистый способ сделать что-то - ну, не делать этого. Это похоже на случай здесь. Проблема, с которой вы сталкиваетесь при передаче сообщения в функцию триггера, при правильном форматировании. Хорошо, поскольку функция триггера должна быть определена без параметров.
Процедура триггера создается с помощью команды CREATE FUNCTION, объявляющей ее как функцию без аргументов и возвращаемый тип триггера. ,
Не делай этого. Постройте сообщение в триггерной функции. Это на самом деле делает код там проще (IMO). Вы не предоставили много подробностей, поэтому просто минимальный пример:
-- 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);