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

पोस्टग्रेज SQL में डालें

ऐसा मत करो! कभी भी ! ऐसा करने के बारे में सोचें भी नहीं!

यह गलत समाधान आपके लिए कारगर प्रतीत हो सकता है (यह नहीं है):

INSERT INTO lists VALUES ((SELECT max(id)+1 FROM lists),'KO','SPH', '5');

लेकिन , यदि कोई आपके जैसे ही समय डालने का प्रयास करता है, तो आप दोनों को एक ही id मिलेगा , जो एक अमान्य परिणाम देगा। आपको वास्तव में एक sequence का उपयोग करना चाहिए या कुछ और विश्वसनीय तंत्र (एक सहायक तालिका सामान्य है जब आपके पास अनुक्रम में छेद नहीं हो सकते हैं, लेकिन इसमें कुछ कमियां हैं [यह लॉक हो जाएगा])। आप serial . का भी उपयोग कर सकते हैं इसे आसान बनाने के लिए डेटा प्रकार (यह नीचे एक क्रम बनाता है):

CREATE TABLE lists(id serial, col2 text, col3 text, ...);
-- If you don't specify "id", it will autogenerate for you:
INSERT INTO lists(col2, col3, ...) VALUES('KO','SPH', ...);
-- You can also specify using DEFAULT (the same as above):
INSERT INTO lists(id, col2, col3, ...) VALUES(DEFAULT, 'KO','SPH', ...);

यदि आप वास्तव में, वास्तव में, अनुक्रम नहीं बना सकते हैं और उसका उपयोग नहीं कर सकते हैं, तो आप उपरोक्त के रूप में कर सकते हैं, लेकिन आपको अपवाद को संभालना होगा (id मानते हुए) फ़ील्ड पीके या यूके है, और एक पठित प्रतिबद्ध लेनदेन का उपयोग करके), ऐसा कुछ (पीएल/पीजीएसक्यूएल में):

DECLARE
    inserted bool = false;
BEGIN
    WHILE NOT inserted LOOP;
        BEGIN
            INSERT INTO lists
            VALUES ((SELECT coalesce(max(id),0)+1 FROM lists),'KO','SPH', '5');
            inserted = true;
        EXCEPTION
            WHEN unique_violation THEN
                NULL; -- do nothing, just try again
        END;
    END LOOP;
END;

लेकिन फिर से, मैं आपको इससे बचने की अत्यधिक सलाह देता हूं:अनुक्रम का उपयोग करें और खुश रहें... =D

साथ ही, मुझे पता है कि यह एक उदाहरण है, लेकिन INSERT INTO . पर स्पष्ट कॉलम सूची का उपयोग करें खंड।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL, Postgres और Aurora के लिए सर्वर रहित GraphQL API कैसे बनाएं?

  2. क्या PostgreSQL में प्राथमिक कुंजी के रूप में UUID खराब सूचकांक प्रदर्शन देगा?

  3. सम्मिलित क्वेरी में इनपुट के रूप में चुनिंदा क्वेरी के आउटपुट का उपयोग कैसे करें?

  4. कैसे make_timestamp () PostgreSQL में काम करता है

  5. पोस्टग्रेज 9.1 के लिए डॉकटर कंटेनर होस्ट करने के लिए पोर्ट 5432 को उजागर नहीं कर रहा है