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

यह नियम डुप्लीकेट कुंजी के उल्लंघन को क्यों नहीं रोकता है?

डिफ़ॉल्ट रूप से नियम वर्तमान कार्रवाई में चीज़ें जोड़ें :

लेकिन एक INSTEAD नियम आपको क्रिया को बदलने की अनुमति देता है:

इसलिए, मुझे लगता है कि आप INSTEAD निर्दिष्ट करना चाहते हैं :

CREATE OR REPLACE RULE ignore_duplicate_inserts AS
   ON INSERT TO mytable
   WHERE (EXISTS ( SELECT mytable.id
           FROM mytable
          WHERE mytable.id = new.id)) DO INSTEAD NOTHING;

INSTEAD के बिना, आपका नियम अनिवार्य रूप से कह रहा है "INSERT करें और फिर कुछ न करें" जब आप "INSERT के बजाय, कुछ भी न करें" और, AFAIK, DO INSTEAD NOTHING कहना चाहते हैं। ऐसा करेंगे।

मैं PostgreSQL नियमों का विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि "INSTEAD" जोड़ना काम करना चाहिए।

अपडेट करें :araqnid को धन्यवाद हम जानते हैं कि :

तो इस स्थिति में कोई नियम काम नहीं करेगा। हालांकि, COPY FROM के दौरान ट्रिगर सक्रिय हो जाते हैं ताकि आप INSERT से पहले लिख सकें। ट्रिगर जो NULL लौटाएगा जब उसे डुप्लिकेट पंक्तियों का पता चला:

उस ने कहा, मुझे लगता है कि आप araqnid के "इसे एक अस्थायी तालिका में लोड करें, इसे साफ करें, और इसे अंतिम गंतव्य पर कॉपी करें" के साथ बेहतर होगा, आपके जैसे थोक लोडिंग ऑपरेशन के लिए एक अधिक समझदार समाधान होगा।

  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 में मुख्य मूल्य जोड़ी

  2. Postgres . में कीवर्ड जैसे कॉलम नामों से बचना

  3. मुझे तालिका से 88 यादृच्छिक पंक्तियों का चयन करने के लिए एक फ़ंक्शन की आवश्यकता है (डुप्लिकेट के बिना)

  4. PostgreSQL में डिफ़ॉल्ट बाधा नाम क्या है?

  5. कैस्केड ट्रिगर अपडेट इस पंक्ति के कारण पंक्ति को हटाया नहीं जा रहा है