PostgreSQL में, आप IF NOT EXISTS
. का उपयोग कर सकते हैं CREATE TABLE
का खंड यह जाँचने के लिए कथन कि एक ही नाम की तालिका बनाने से पहले डेटाबेस में पहले से मौजूद है या नहीं।
तालिका केवल तभी बनाई जाएगी जब समान नाम वाली कोई अन्य तालिका मौजूद न हो। यदि उस नाम की तालिका पहले से मौजूद है, तो त्रुटि के बजाय एक "नोटिस" जारी किया जाएगा।
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
यहाँ, t1
तालिका का नाम है, और कोष्ठकों के बीच सब कुछ तालिका परिभाषा (अर्थात स्तंभ, आदि) है।
उस स्थिति में, तालिका केवल तभी बनाई जाएगी जब t1
. नामक पहले से कोई तालिका न हो ।
जांचें कि तालिका अभी मौजूद है या नहीं
हम pg_tables
को क्वेरी कर सकते हैं यह देखने के लिए देखें कि क्या तालिका अब मौजूद है:
SELECT EXISTS (
SELECT FROM
pg_tables
WHERE
schemaname = 'public' AND
tablename = 't1'
);
परिणाम:
True
इस मामले में मुझे True
मिलता है , जिसका अर्थ है कि तालिका मौजूद है और मेरी उस तक पहुंच है।
आपके कॉन्फ़िगरेशन के आधार पर, आपको t
. मिल सकता है /f
True
. के बजाय /False
।
तालिका फिर से बनाने का प्रयास करें
यदि हम उस तालिका को फिर से बनाने का प्रयास करते हैं:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
हमें कोई त्रुटि नहीं मिलती, हमें एक सूचना मिलती है:
NOTICE: relation "t1" already exists, skipping
जैसा कि अपेक्षित था, नोटिस हमें बताता है कि तालिका पहले से मौजूद है।
बिना IF NOT EXISTS
खंड
यहां बताया गया है कि जब हम IF NOT EXISTS
. का उपयोग नहीं करते हैं तो क्या होता है एक तालिका बनाने का प्रयास करते समय खंड जो पहले से मौजूद है:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
इस बार हमें एक त्रुटि मिली:
ERROR: relation "t1" already exists
ध्यान दें कि IF NOT EXISTS
खंड तालिका संरचना/परिभाषा की जांच नहीं करता है। यह केवल यह जांचता है कि हमारे द्वारा बनाई जा रही तालिका को उसी नाम से कोई मौजूदा तालिका नहीं है जिसे हम देने का प्रयास कर रहे हैं।
दूसरे शब्दों में, सिर्फ इसलिए कि उस नाम की एक तालिका पहले से मौजूद है, इसका मतलब यह नहीं है कि इसकी सही परिभाषा है।
IF NOT EXISTS
PostgreSQL 9.1 (रिलीज़ नोट्स) में कार्यक्षमता जोड़ी गई थी।