PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

ट्रिगर के अंदर बुलाए गए पोस्टग्रेज फ़ंक्शन में स्टेटमेंट का चयन करें

कुछ इस तरह?

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;

टिप्पणियों से भी:

आप चीजों को गलत समझते हैं। वापसी और सूचना दो अलग-अलग चीजें हैं।

सबसे पहले वापसी के साथ सौदा करते हैं। INSERT ट्रिगर के बाद वापसी मूल्य को पूरी तरह से अनदेखा कर दिया जाता है :

वापसी मूल्य केवल ट्रिगर से पहले के लिए मायने रखता है। इस मामले में आप तालिका में लिखने से पहले पंक्ति को संशोधित (या रोक भी सकते हैं) कर सकते हैं। इसे देखें:https://www.postgresql.org/docs/9.2/ plpgsql-trigger.html इसका सूचनाओं से कोई लेना-देना नहीं है।

तो सूचनाओं का क्या? एक सूचना से आपको जो कुछ भी प्राप्त होता है, वही आप pg_notify के दूसरे तर्क के रूप में पास करते हैं . वह सब काफी अच्छी तरह से प्रलेखित है: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. PostgreSQL unescape JSON स्ट्रिंग

  2. Postgresql स्कीमा पथ को स्थायी रूप से सेट करें

  3. Postgresql के साथ Django, कॉलम ग्रुप बाय क्लॉज में दिखाई देना चाहिए या एक समग्र फ़ंक्शन में उपयोग किया जाना चाहिए

  4. NpgsqlCopySerialize और NpgsqlCopyIn का क्या हुआ?

  5. हाइबरनेट के साथ PostgreSQL सरणी को कैसे मैप करें