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

INSERT में अस्पष्ट कॉलम संदर्भ ... संघर्ष पर अद्यतन करें

आपको उस कॉलम को टेबल-क्वालिफाई करना होगा जहां यह अन्यथा अस्पष्ट होगा।
वर्चुअल टेबल नाम का उपयोग करें excluded इनपुट पंक्ति को संदर्भित करने के लिए। लेकिन आप शायद लक्ष्य कॉलम का उल्लेख करना चाहते हैं, इसलिए लक्ष्य तालिका के नाम के साथ योग्यता प्राप्त करें:

INSERT INTO test.test_counter (id)
VALUES ('id-0')
ON CONFLICT (id) DO UPDATE
SET count = test_counter.count + 1  -- here
RETURNING count;

मैनुअल:

वर्चुअल इनपुट तालिका से एकल पंक्ति excluded इसमें सभी शामिल हैं लक्ष्य तालिका के स्तंभ, भले ही INSERT . के लक्ष्य स्तंभ सूची में सूचीबद्ध न हों या VALUES अभिव्यक्ति। तो आप जिस अस्पष्टता का सामना कर रहे हैं वह हमेशा बनी रहती है, चाहे count स्पष्ट रूप से लक्षित है या नहीं।

इसके अलावा:लक्ष्य कॉलम सूची में छोड़े गए कॉलम उनके संबंधित कॉलम DEFAULT के लिए डिफ़ॉल्ट हैं मान, जो NULL . है डिफ़ॉल्ट रूप से (NULL डिफ़ॉल्ट कॉलम होने के नाते DEFAULT ) यानी, यह डिफ़ॉल्ट रूप से NULL . होगा आपके सेटअप में और 1 नीचे मेरे बेहतर सेटअप में। और पंक्ति-स्तरीय ट्रिगर BEFORE INSERT (यदि कोई हो) लागू होते हैं।

लेकिन इनमें से कोई भी उदाहरण के लिए लागू नहीं होता क्योंकि यह लक्ष्य . को संदर्भित करता है आखिर कॉलम।

विशेष रूप से, कॉलम नाम के अन्य दो उदाहरण count स्पष्ट हैं (और इस प्रकार तालिका-योग्यता की आवश्यकता नहीं है) क्योंकि वे केवल लक्ष्य को संदर्भित कर सकते हैं टेबल।

कॉलम count . के दौरान आपका सेटअप आसानी से टूट सकता है परिभाषित नहीं है NOT NULL , NULL + 1 . के रूप में अभी भी NULL है . यह सेटअप अधिक सार्थक होगा:

CREATE TABLE test.test_counter (
  id    text PRIMARY KEY
, count integer NOT NULL DEFAULT 1
);

मेरे उदाहरण में उद्धृत CaMeL- केस नामों का भी उपयोग नहीं करना। देखें:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जांचें कि क्या sqlalchemy तालिका खाली है

  2. Npgsql:टाइमस्टैम्प के लिए पुराना फ़्लोटिंग पॉइंट प्रतिनिधित्व समर्थित नहीं है

  3. मैं .net कोर प्रोजेक्ट में सिग्नलआर कोर के साथ पोस्टग्रेस्क्ल डेटाबेस कैसे सुन सकता हूं?

  4. आयात त्रुटि क्या है:प्रतीक नहीं मिला:_PQencryptPasswordConn का अर्थ है और मैं इसे कैसे ठीक करूं?

  5. रेल और पोस्टग्रेस्क्ल:घंटे के आधार पर प्रश्नों को कैसे समूहित करें?