postgresql - Postgres Rules Preventing CTE Queries -


पोस्टग्रेस 9.3 का प्रयोग करना:

मैं एक तालिका को स्वचालित रूप से पॉप्यूलेट करने का प्रयास कर रहा हूं जब कोई डालने दूसरे पर किया जाता है तालिका। यह नियमों के लिए अच्छा उपयोग जैसा लगता है, लेकिन पहली तालिका में नियम जोड़ने के बाद, मैं अब लिखे जाने योग्य सीटीई के माध्यम से दूसरी तालिका में सम्मिलित करने में सक्षम नहीं हूं। यहां एक उदाहरण है:

  बनाओ टेबल फ़ू (आईडी INT प्राथमिक कुंजी); टेबल बार बनाएं (आईडी INT प्राथमिक कुंजी संदर्भ foo); नियम बनाने के लिए INSERT पर फू डालें Foo डालने के लिए बार मूल्यों में (NEW.id); साथ में एएस (सेलेक्ट * FROM (वैल्यू (1), (2)) ख) फू से चुनिए * इसमें से एक   

जब यह चल रहा है, मुझे त्रुटि मिलती है

"त्रुटि: साथ एक क्वेरी में उपयोग नहीं किया जा सकता है जो नियमों द्वारा कई क्वेरीज़ में फिर से लिखा जाता है।"

मैंने उस त्रुटि स्ट्रिंग की खोज की है, लेकिन मैं केवल स्रोत कोड के लिए लिंक ढूंढें मुझे पता है कि मैं उपरोक्त पंक्ति-स्तर के बजाय ट्रिगर का उपयोग कर सकता हूं, लेकिन ऐसा लगता है कि मुझे यह बयान स्तर पर करने में सक्षम होना चाहिए। मैं लिखने योग्य सीटीई का उपयोग क्यों नहीं कर सकता, जब इस तरह के प्रश्न (इस मामले में) आसानी से फिर से लिखा जा सकता है:

  foo SELECT * से INSERT (VALUES (1), (2 )) एक   

क्या किसी अन्य तरीके से पता है कि वह क्या पूरा करेगा जो मैं 1 के अलावा अन्य करने का प्रयास कर रहा हूं) नियमों का उपयोग कर, जो कि "के साथ" प्रश्नों के प्रयोग को रोकता है या 2) पंक्ति स्तर ट्रिगर? धन्यवाद, एक

टीएल; डीआर: उपयोग ट्रिगर करता है, न कि नियम।

आम तौर पर बोलना, नियमों पर ट्रिगर पसंद करते हैं, जब तक नियम बिल्कुल आवश्यक नहीं हो। (जो, अभ्यास में, वे कभी भी नहीं हैं।)

नियमों का उपयोग करना समस्याओं के ढेर का परिचय देता है जो आपके जीवन को बेवजह से सड़क से नीचे गड़बड़ कर देगा। आप यहाँ एक में चले गए हैं उदाहरण के लिए, एक अन्य (प्रमुख) एक है, कि प्रभावित पंक्तियों की संख्या अंतिम अंतिम प्रश्न के अनुरूप होगी - यदि आप कहीं पर फ़ॉउड पर निर्भर हैं और आपकी क्वेरी ग़लत ढंग से रिपोर्ट कर रही है कि क्वेरी से किसी भी पंक्तियों को प्रभावित नहीं किया गया है, आप दर्दनाक बगों में होंगे।

इसके अलावा, पोस्टग्रेज़ के नियमों को निरस्त करने की कभी-कभी बात है:



Comments