sql >> データベース >  >> RDS >> PostgreSQL

トリガー内で呼び出されたpostgres関数のselectステートメント

    このようなものですか?

    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;
    

    コメントからも:

    あなたは物事を誤解しています。 返品と通知は2つの異なるものです。

    まず、返品に対処しましょう。 AFTER INSERTトリガーの場合、戻り値は完全に無視されます

    戻り値は、BEFOREトリガーに対してのみ重要です。その場合、テーブルに書き込む前に行を変更(または防止)することができます。これを参照してください: https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html これは通知とは関係ありません。

    では、通知はどうですか? 通知から受け取るものはすべて、pg_notifyに2番目の引数として渡すものです。 。 そのすべてが非常によく文書化されています: https://www.postgresql.org /docs/9.0/sql-notify.html




    1. MySQLWorkbenchはMACOSX上のローカルMySQLサービスに接続できません

    2. MySQLの日付と時刻の単位(完全なリスト)

    3. AtlassianBitbucketを使用したPostgreSQLバージョン管理

    4. webLogic サーバーのネイティブ JSF 実装を無効にし、myfaces 実装を使用する