sql >> Databasteknik >  >> RDS >> PostgreSQL

välj uttalande i postgres-funktionen anropad inuti en trigger

Något sånt här?

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;

Även från kommentarer:

Du missförstår saker. Retur och avisering är två olika saker.

Låt oss först och främst ta itu med avkastningen. För AFTER INSERT-utlösare ignoreras returvärdet totalt :

Returvärdet har bara betydelse för BEFORE-utlösare. I så fall kan du ändra (eller till och med förhindra) raden innan du skriver till tabellen. Se detta:https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html Detta har inget med aviseringar att göra.

Så hur är det med aviseringar? Vad du än får från ett meddelande är det du skickar som andra argument till pg_notify . Allt detta är ganska väldokumenterat:https://www.postgresql.org /docs/9.0/sql-notify.html




  1. MySQL kraschar hela tiden

  2. PHP PDO Postgres kontra SQLite kolumntyp för count(*)

  3. CreateSQLQuery fungerar men QueryOver gör det inte med NHibernate

  4. Att använda DISTINCT i JOIN skapar problem