PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

instruction select dans la fonction postgres appelée à l'intérieur d'un déclencheur

Quelque chose comme ça ?

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;

Aussi à partir des commentaires :

Vous comprenez mal les choses. Retour et notification sont deux choses différentes.

Tout d'abord, abordons le retour. Pour les déclencheurs AFTER INSERT la valeur de retour est totalement ignorée :

La valeur de retour n'a d'importance que pour les déclencheurs BEFORE. Auquel cas vous pouvez modifier (voire empêcher) la ligne avant d'écrire dans la table. Voir ceci :https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html Cela n'a rien à voir avec les notifications.

Et les notifications ? Tout ce que vous recevez d'une notification est ce que vous transmettez comme deuxième argument à pg_notify . Tout cela est assez bien documenté :https://www.postgresql.org /docs/9.0/sql-notify.html