PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

instrukcja select w funkcji postgres wywołana wewnątrz wyzwalacza

Coś takiego?

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;

Również z komentarzy:

Źle rozumiesz rzeczy. Zwrot i powiadomienie to dwie różne rzeczy.

Przede wszystkim zajmijmy się zwrotem. W przypadku wyzwalaczy AFTER INSERT zwracana wartość jest całkowicie ignorowana :

Zwracana wartość ma znaczenie tylko dla wyzwalaczy PRZED. W takim przypadku możesz zmodyfikować (lub nawet uniemożliwić) wiersz przed zapisaniem do tabeli. Zobacz to:https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html To nie ma nic wspólnego z powiadomieniami.

A co z powiadomieniami? Cokolwiek otrzymujesz z powiadomienia, przekazujesz jako drugi argument do pg_notify . Wszystko to jest dość dobrze udokumentowane:https://www.postgresql.org /docs/9.0/sql-notify.html




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. django nie może połączyć się z RDS postgresql

  2. Warunek SQL LIKE do sprawdzenia liczby całkowitej?

  3. Policz wiersze po dołączeniu do trzech tabel w PostgreSQL

  4. Django Łączące __nieakcentowe i __wyszukiwania wyszukiwania

  5. Najlepsze praktyki bezpieczeństwa PostgreSQL