Một cái gì đó như thế này?
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;
Cũng từ nhận xét:
Bạn hiểu lầm mọi thứ. Trả lại và thông báo là hai thứ khác nhau.
Trước hết, hãy đối phó với sự trở lại. Đối với trình kích hoạt SAU KHI CHÈN, giá trị trả về hoàn toàn bị bỏ qua :
Giá trị trả về chỉ quan trọng đối với kích hoạt TRƯỚC. Trong trường hợp đó, bạn có thể sửa đổi (hoặc thậm chí ngăn chặn) hàng trước khi ghi vào bảng. Xem phần này: https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html Điều này không liên quan gì đến thông báo.
Vậy thông báo thì sao? Bất cứ điều gì bạn nhận được từ một thông báo là những gì bạn chuyển làm đối số thứ hai cho pg_notify
. Tất cả những điều đó được ghi lại khá đầy đủ: https://www.postgresql.org /docs/9.0/sql-notify.html