के बारे में NULL
'anything' NOT LIKE NULL
उपज NULL
, नहीं TRUE
.
और केवल TRUE
WHERE
. में फ़िल्टर एक्सप्रेशन के लिए योग्यता प्राप्त करता है खंड।
अधिकांश फ़ंक्शन NULL
लौटाते हैं NULL
. पर इनपुट (अपवाद हैं)। यह NULL
की प्रकृति है किसी भी . में उचित आरडीबीएमएस।
अगर आप एक एकल . चाहते हैं अभिव्यक्ति, आप कर सकते थे उपयोग करें:
AND (column_default LIKE 'nextval%') IS NOT TRUE;
हालांकि, यह शायद ही छोटा या तेज है। मैनुअल में विवरण।
उचित क्वेरी
आपकी क्वेरी अभी भी अविश्वसनीय है। Postgres डेटाबेस में अकेले तालिका नाम अद्वितीय नहीं है, आपको इसके अतिरिक्त स्कीमा नाम निर्दिष्ट करना होगा या वर्तमान search_path
पर भरोसा करना होगा इसमें पहला मैच खोजने के लिए:
संबंधित:
- खोज_पथ पहचानकर्ता संकल्प और "वर्तमान स्कीमा" को कैसे प्रभावित करता है
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'hstore1'
AND table_schema = 'public' -- your schema
AND (column_default IS NULL OR
column_default NOT LIKE 'nextval%');
बेहतर है, लेकिन फिर भी बुलेट प्रूफ नहीं है। 'नेक्स्टवल' से शुरू होने वाला कॉलम डिफॉल्ट एक serial
नहीं बनाता है , अभी तक। देखें:
- ऑटो इंक्रीमेंट टेबल कॉलम
यह सुनिश्चित करने के लिए, जांच करें कि उपयोग में आने वाला क्रम pg_get_serial_sequence(table_name, column_name)
वाले कॉलम के पास "स्वामित्व" है या नहीं ।
मैं शायद ही कभी स्वयं सूचना स्कीमा का उपयोग करता हूँ। वे धीमे, फूले हुए दृश्य प्रमुख संस्करणों में पोर्टेबिलिटी की गारंटी देते हैं - और अन्य मानक-अनुपालन वाले RDBMS के लिए पोर्टेबिलिटी का लक्ष्य रखते हैं। लेकिन वैसे भी बहुत अधिक असंगत है। Oracle सूचना स्कीमा (2015 तक) को भी लागू नहीं करता है।
साथ ही, सूचना स्कीमा में उपयोगी पोस्टग्रेज-विशिष्ट कॉलम गायब हैं। इस मामले के लिए मैं सिस्टम कैटलॉग को इस तरह से क्वेरी कर सकता हूं:
SELECT *
FROM pg_catalog.pg_attribute a
WHERE attrelid = 'table1'::regclass
AND NOT attisdropped -- no dropped (dead) columns
AND attnum > 0 -- no system columns
AND NOT EXISTS (
SELECT FROM pg_catalog.pg_attrdef d
WHERE (d.adrelid, d.adnum) = (a.attrelid, a.attnum)
AND d.adsrc LIKE 'nextval%'
AND pg_get_serial_sequence(a.attrelid::regclass::text, a.attname) <> ''
);
तेज़ और अधिक विश्वसनीय, लेकिन कम पोर्टेबल।
मैनुअल:
<ब्लॉकक्वॉट>
कैटलॉग pg_attrdef
कॉलम डिफ़ॉल्ट मान संग्रहीत करता है। स्तंभों के बारे में मुख्य जानकारी pg_attribute
. में संग्रहीत है (नीचे देखें)। केवल वही कॉलम जो स्पष्ट रूप से एक डिफ़ॉल्ट मान निर्दिष्ट करते हैं (जब तालिका बनाई जाती है या कॉलम जोड़ा जाता है) में यहां एक प्रविष्टि होगी।
'table1'::regclass
search_path
. का उपयोग करता है नाम को हल करने के लिए, जो अस्पष्टता से बचा जाता है। आप नाम को रद्द करने के लिए स्कीमा-योग्यता प्राप्त कर सकते हैं:'myschema.table1'::regclass
।
संबंधित:
- तालिका, फ़ील्ड और स्कीमा नाम का उपयोग करके संदर्भित तालिका का नाम ढूंढें
- पोस्टग्रेज में टेबल कॉलम के डिफ़ॉल्ट मान प्राप्त करें?