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

vælg sætning i postgres-funktionen kaldet inde i en trigger

Sådan noget?

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;

Også fra kommentarer:

Du misforstår tingene. Retur og notifikation er to forskellige ting.

Lad os først og fremmest beskæftige os med tilbagevenden. For AFTER INSERT-udløsere ignoreres returværdien totalt :

Returværdien har kun betydning for FØR-udløsere. I så fald kan du ændre (eller endda forhindre) rækken, før du skriver til tabellen. Se dette:https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html Dette har intet at gøre med notifikationer.

Så hvad med notifikationer? Hvad end du modtager fra en meddelelse, er det, du videregiver som andet argument til pg_notify . Alt dette er ganske veldokumenteret:https://www.postgresql.org /docs/9.0/sql-notify.html




  1. Hvordan statement_timestamp() virker i PostgreSQL

  2. Går til fanen Specifik i orakelformularer

  3. Er det muligt at udføre krydsdatabaseforespørgsler med PostgreSQL?

  4. Fang duplikatindtastning Undtagelse