sql >> Base de Datos >  >> RDS >> PostgreSQL

declaración de selección en la función de postgres llamada dentro de un disparador

¿Algo así?

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;

También de los comentarios:

malinterpretas las cosas. La devolución y la notificación son dos cosas diferentes.

En primer lugar, hablemos de la devolución. Para los activadores AFTER INSERT el valor devuelto se ignora por completo :

El valor devuelto solo importa para los disparadores ANTES. En cuyo caso, puede modificar (o incluso evitar) la fila antes de escribir en la tabla. Vea esto:https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html Esto no tiene nada que ver con las notificaciones.

Entonces, ¿qué pasa con las notificaciones? Todo lo que recibe de una notificación es lo que pasa como segundo argumento a pg_notify . Todo eso está bastante bien documentado:https://www.postgresql.org /docs/9.0/sql-notify.html