सिंटैक्स होगा:
CREATE TRIGGER tr_total_games
AFTER UPDATE OF game_saved ON game_info
FOR EACH ROW
EXECUTE PROCEDURE total_games();
(जैसा कि मैनुअल में प्रलेखित है।)
लेकिन पूरा तरीका संदिग्ध है। ट्रिगर के माध्यम से समुच्चय को अद्यतित रखना समवर्ती लेखन भार के तहत त्रुटियों की संभावना है।
और समवर्ती लेखन भार के बिना, सरल समाधान हैं:वर्तमान कुल में से केवल 1 जोड़ें / घटाएं ...
एक VIEW
एक विश्वसनीय विकल्प होगा। कॉलम निकालें game_collection.total_game_count
पूरी तरह से - और शायद पूरी तालिका game_collection
, जिसका कोई अन्य उद्देश्य नहीं लगता। एक VIEW
बनाएं इसके बजाय:
CREATE VIEW v_game_collection AS
SELECT user_id, count(*) AS total_game_count
FROM game_info
WHERE game_saved
GROUP BY user_id;
यह game_info
. में कम से कम 1 पंक्ति वाले सभी उपयोगकर्ताओं को लौटाता है जहां game_saved IS TRUE
. है (और अन्य सभी को छोड़ देता है)।
बहुत बड़ी तालिकाओं के लिए आप एक MATERIALIZED VIEW
चाह सकते हैं।
या पढ़ने के प्रदर्शन को बेहतर बनाने के लिए संबंधित समाधान।