PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

instrução select na função postgres chamada dentro de um gatilho


Algo assim?
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;

Também dos comentários:

Você entende mal as coisas. Retorno e notificação são duas coisas diferentes.

Primeiro de tudo vamos lidar com o retorno. Para gatilhos AFTER INSERT o valor de retorno é totalmente ignorado :

O valor de retorno só importa para gatilhos BEFORE. Nesse caso, você pode modificar (ou até impedir) a linha antes de gravar na tabela. Veja isto:https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html Isso não tem nada a ver com notificações.

Então e as notificações? O que você recebe de uma notificação é o que você passa como segundo argumento para pg_notify . Tudo isso está bem documentado:https://www.postgresql.org /docs/9.0/sql-notify.html