PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

istruzione select nella funzione postgres chiamata all'interno di un trigger

Qualcosa del genere?

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;

Anche dai commenti:

Tu fraintendi le cose. Il reso e la notifica sono due cose diverse.

Prima di tutto affrontiamo il ritorno. Per i trigger AFTER INSERT il valore di ritorno viene totalmente ignorato :

Il valore restituito è importante solo per i trigger BEFORE. In tal caso è possibile modificare (o addirittura impedire) la riga prima di scrivere sulla tabella. Vedi questo:https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html Questo non ha nulla a che fare con le notifiche.

Allora che dire delle notifiche? Qualunque cosa ricevi da una notifica è ciò che passi come secondo argomento a pg_notify . Tutto ciò è abbastanza ben documentato:https://www.postgresql.org /docs/9.0/sql-notify.html