SQL Academy · पाठ

अपडेट योग्य VIEW और INSTEAD OF ट्रिगर

VIEW को सीधे अपडेट योग्य बनाएँ या जब VIEW डेटा का एग्रीगेशन अथवा जॉइन करता हो तब INSTEAD OF ट्रिगर का उपयोग करें

पाठ 2, कुल 4 में से13 चरण

अपडेट योग्य VIEW और INSTEAD OF ट्रिगर, CoddyKit पर SQL Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

अपने आप अपडेट होने वाले व्यू

PostgreSQL सरल व्यू को अपने आप अपडेट किए जा सकने योग्य बनाता है। व्यू पर INSERT/UPDATE/DELETE को बेस टेबल पर उसी ऑपरेशन के रूप में फिर से लिखा जाता है:

CREATE VIEW active_users AS
  SELECT id, email, full_name FROM users WHERE deleted_at IS NULL;

UPDATE active_users SET full_name = 'Alice' WHERE id = 1;
-- Translates to UPDATE on the users table.

अपने आप अपडेट होने के लिए आवश्यकताएँ

व्यू में ये शर्तें होनी चाहिए:

  • ठीक एक बेस टेबल का संदर्भ हो
  • कोई एग्रीगेट, GROUP BY, HAVING या DISTINCT न हो
  • कोई LIMIT या OFFSET न हो
  • कोई सेट ऑपरेशन (UNION आदि) न हो
  • कॉलम सीधे मैप किए गए हों (SELECT सूची में कोई एक्सप्रेशन न हो — या केवल कुछ एक्सप्रेशन हों)

WITH CHECK OPTION

ऐसी राइट को रोकें जिससे वे रो बनें जो व्यू में दिखाई नहीं देतीं:

CREATE VIEW active_users AS
  SELECT * FROM users WHERE deleted_at IS NULL
  WITH CHECK OPTION;

INSERT INTO active_users (email, deleted_at) VALUES (..., NOW());
-- ERROR — would create a row outside the view's WHERE.

जटिल व्यू के लिए INSTEAD OF आवश्यक है

JOIN, एग्रीगेट या एक्सप्रेशन वाले व्यू अपने आप अपडेट नहीं किए जा सकते। आपको एक INSTEAD OF ट्रिगर लिखना होगा, जो यह परिभाषित करे कि लिखने का अर्थ क्या है:

CREATE VIEW user_with_address AS
  SELECT u.id, u.email, a.city, a.country
  FROM users u JOIN addresses a ON a.user_id = u.id;

CREATE TRIGGER user_addr_update
INSTEAD OF UPDATE ON user_with_address
FOR EACH ROW EXECUTE FUNCTION update_user_addr();

INSTEAD OF ट्रिगर फ़ंक्शन

फ़ंक्शन तय करता है कि किन बेस टेबल में लिखा जाए:

CREATE FUNCTION update_user_addr() RETURNS TRIGGER AS $$
BEGIN
  UPDATE users SET email = NEW.email WHERE id = NEW.id;
  UPDATE addresses SET city = NEW.city, country = NEW.country WHERE user_id = NEW.id;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

INSTEAD OF ऐप लॉजिक से बेहतर कब है

यदि कई उपभोक्ता व्यू को अपडेट करते हैं, तो अपडेट लॉजिक को ट्रिगर में केंद्रीकृत करने से संगतता मिलती है। यदि केवल एक ऐप अपडेट करता है, तो लॉजिक को ऐप कोड में ही रखें।

SECURITY BARRIER

प्लानर को अविश्वसनीय व्यू उपभोक्ताओं के प्रेडिकेट अंदर पहुँचाने से रोकें (लागत के माध्यम से सूचना का रिसाव):

CREATE VIEW my_things AS
SELECT * FROM things WHERE owner_id = current_user_id()
WITH (security_barrier);

वैकल्पिक रूप में रो-स्तरीय सुरक्षा

आधुनिक PostgreSQL बेस टेबल पर रो-स्तरीय सुरक्षा (RLS) का भी समर्थन करता है — सुरक्षा व्यू बनाने की तुलना में यह अक्सर अधिक साफ़ तरीका होता है।

ALTER TABLE things ENABLE ROW LEVEL SECURITY;
CREATE POLICY owner_only ON things USING (owner_id = current_user_id());

रिकर्सिव व्यू

PostgreSQL रिकर्सिव व्यू का समर्थन करता है (ऐसी पदानुक्रमित संरचना, जिसे आप SELECT कर सकते हैं):

CREATE RECURSIVE VIEW tree (id, parent_id, depth) AS
  SELECT id, parent_id, 0 FROM nodes WHERE parent_id IS NULL
  UNION ALL
  SELECT n.id, n.parent_id, t.depth + 1
  FROM nodes n JOIN tree t ON n.parent_id = t.id;

अनुमतियाँ

अनुमति व्यू पर दें, बेस टेबल पर नहीं:

GRANT SELECT, UPDATE ON active_users TO app_user;

प्रदर्शन संबंधी टिप्पणी

INSTEAD OF ट्रिगर प्रत्येक रो के लिए चलता है। बड़े पैमाने के DML के लिए यह धीमा होता है। अक्सर कॉल करने वालों से सीधे बेस टेबल में लिखवाना बेहतर होता है।

पुनरावलोकन

व्यू में लिखा भी जा सकता है।

  • सरल व्यू: अपने आप अपडेट होते हैं
  • जटिल व्यू: INSTEAD OF ट्रिगर
  • WITH CHECK OPTION दृश्यता लागू करता है
  • RLS अक्सर अधिक साफ़ सुरक्षा मॉडल होता है

त्वरित जाँच

आप दो टेबल को जोड़ने वाला व्यू परिभाषित करते हैं। क्या डिफ़ॉल्ट रूप से आप इसके माध्यम से UPDATE कर सकते हैं?

शुरुआत निःशुल्क

एआई शिक्षक के साथ SQL सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
46
पाठ
183

अक्सर पूछे जाने वाले प्रश्न

क्या “अपडेट योग्य VIEW और INSTEAD OF ट्रिगर” पाठ निःशुल्क है?

हाँ—“अपडेट योग्य VIEW और INSTEAD OF ट्रिगर” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“अपडेट योग्य VIEW और INSTEAD OF ट्रिगर” में मैं क्या सीखूँगा?

VIEW को सीधे अपडेट योग्य बनाएँ या जब VIEW डेटा का एग्रीगेशन अथवा जॉइन करता हो तब INSTEAD OF ट्रिगर का उपयोग करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या SQL Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“अपडेट योग्य VIEW और INSTEAD OF ट्रिगर” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस SQL Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर SQL Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. साधारण VIEW: तार्किक पुनःउपयोग
  2. अपडेट योग्य VIEW और INSTEAD OF ट्रिगर
  3. MATERIALIZED VIEW और REFRESH रणनीतियाँ
  4. प्री-एग्रीगेशन कब करें
← SQL Academy पर वापस जाएँ