sql >> Database >  >> RDS >> PostgreSQL

select statement in postgres functie aangeroepen in een trigger

Zoiets?

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;

Ook uit opmerkingen:

Je begrijpt dingen verkeerd. Retourneren en melding zijn twee verschillende dingen.

Laten we eerst de terugkeer regelen. Voor AFTER INSERT-triggers de retourwaarde wordt volledig genegeerd :

De retourwaarde is alleen van belang voor BEFORE-triggers. In dat geval kunt u de rij wijzigen (of zelfs voorkomen) voordat u naar de tabel schrijft. Zie dit:https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html Dit heeft niets te maken met meldingen.

Dus hoe zit het met meldingen? Wat je ook ontvangt van een melding is wat je als tweede argument doorgeeft aan pg_notify . Dat is allemaal vrij goed gedocumenteerd:https://www.postgresql.org /docs/9.0/sql-notify.html




  1. mysql_real_escape_string() in .NET Framework

  2. Hoe om te gaan met grote mysql-query's

  3. Hoe u elk item kunt afdrukken dat het resultaat is van groep per verklaring

  4. volgorde van uitvoering in webomgeving