このようなものですか?
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;
コメントからも:
あなたは物事を誤解しています。 返品と通知は2つの異なるものです。
まず、返品に対処しましょう。 AFTER INSERTトリガーの場合、戻り値は完全に無視されます :
戻り値は、BEFOREトリガーに対してのみ重要です。その場合、テーブルに書き込む前に行を変更(または防止)することができます。これを参照してください: https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html これは通知とは関係ありません。
では、通知はどうですか? 通知から受け取るものはすべて、pg_notify
に2番目の引数として渡すものです。 。 そのすべてが非常によく文書化されています: https://www.postgresql.org /docs/9.0/sql-notify.html