Qualcosa del genere?
CREATE FUNCTION notif()
RETURNS TRIGGER AS $$
DECLARE
data JSONB;
result JSONB;
BEGIN
SELECT json_agg(tmp) -- requires Postgres9.3+
INTO data
FROM (
-- your subquery goes here, for example:
SELECT followers.following_user_id
FROM followers
WHERE followers.followed_user_id = NEW.user_id
) tmp;
result := json_build_object('data', data, 'row', row_to_json(NEW));
PERFORM pg_notify('event', result::TEXT);
RETURN NEW;
END;
$$ language plpgsql;
Anche dai commenti:
Tu fraintendi le cose. Il reso e la notifica sono due cose diverse.
Prima di tutto affrontiamo il ritorno. Per i trigger AFTER INSERT il valore di ritorno viene totalmente ignorato :
Il valore restituito è importante solo per i trigger BEFORE. In tal caso è possibile modificare (o addirittura impedire) la riga prima di scrivere sulla tabella. Vedi questo:https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html Questo non ha nulla a che fare con le notifiche.
Allora che dire delle notifiche? Qualunque cosa ricevi da una notifica è ciò che passi come secondo argomento a pg_notify
. Tutto ciò è abbastanza ben documentato:https://www.postgresql.org /docs/9.0/sql-notify.html