PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

оператор select във функция postgres, извикан вътре в тригер

Нещо подобно?

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;

Също от коментари:

Не разбираш нещата. Връщането и известяването са две различни неща.

Първо, нека се заемем с връщането. За задействания AFTER INSERT връщаната стойност се игнорира напълно :

Върнатата стойност има значение само за задействания BEFORE. В който случай можете да промените (или дори да предотвратите) реда, преди да пишете в таблицата. Вижте това:https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html Това няма нищо общо с известията.

И така, какво ще кажете за известията? Каквото и да получите от известие, предавате като втори аргумент на pg_notify . Всичко това е доста добре документирано: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. Задействане на Postgres след вмъкване при достъп до НОВО

  2. Docker контейнер за Postgres 9.1 не излага порт 5432 на хост

  3. Двусмислена препратка към колона в INSERT ... ON CONFLICT DO UPDATE

  4. Импортиране на CSV данни в приложението Rails, като се използва нещо различно от идентификатора на асоциацията

  5. Heroku Postgres:psql:ФАТАЛНО:няма запис в pg_hba.conf за хост