PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

câu lệnh select trong hàm postgres được gọi bên trong một trình kích hoạt

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trình điều khiển Postgres JDBC:PSQLException:lỗi cú pháp tại hoặc gần RETURNING

  2. Tại sao postgis của tôi không sử dụng chỉ mục trên trường hình học?

  3. Tại sao tôi gặp lỗi khóa trùng lặp khi cập nhật một hàng?

  4. Lấy tên ngày từ một ngày trong PostgreSQL

  5. Chuyển đổi cột gấu trúc sang danh sách PostgreSQL?