पोस्टग्रेज में कीवर्ड जैसे कॉलम नाम से बचना


134

यदि Postgres की तालिका में स्तंभ का नाम है year, तो INSERTउस स्तंभ के लिए मान सेट करने के लिए क्वेरी कैसे दिखनी चाहिए ?

जैसे: वर्ष शब्द के INSERT INTO table (id, name, year) VALUES ( ... );पास एक त्रुटि देता है ।

जवाबों:


211

कीवर्ड केyear रूप में व्याख्या किए जाने को रोकने के लिए बस दोहरे उद्धरण चिह्नों में संलग्न करें :

INSERT INTO table (id, name, "year") VALUES ( ... );

से प्रलेखन :

एक दूसरे प्रकार का पहचानकर्ता है: सीमांकित पहचानकर्ता या उद्धृत पहचानकर्ता। यह दोहरे-कोट्स (") में वर्णों के एक मनमाने अनुक्रम को संलग्न करके बनाया गया है। एक सीमांकित पहचानकर्ता हमेशा एक पहचानकर्ता होता है, कभी भी एक महत्वपूर्ण शब्द नहीं। इसलिए" चयन "नामक कॉलम या टेबल को संदर्भित करने के लिए" चयन "का उपयोग किया जा सकता है। हालांकि एक निर्विवाद चयन एक महत्वपूर्ण शब्द के रूप में लिया जाएगा और इसलिए जब तालिका या स्तंभ नाम का उपयोग किया जाता है, तो इसका उपयोग किसी त्रुटि के लिए उकसाएगा।


44
कुछ चेतावनी: उद्धरण के बिना PostgreSQL सभी पहचानकर्ताओं को कम करने के लिए सिल देता है। MyTable, myTableऔर mytableबस एक ही हैं। उद्धरणों के साथ यह तह नहीं किया जाता है। तो "MyTable"जैसा है वैसा नहीं है mytable
एएच

19
बेहतर अभी तक, आरक्षित शब्दों या मिश्रित मामले को पहचानकर्ता के रूप में उपयोग करने से बचना होगा और आपको कभी भी दोहरे उद्धरण चिह्नों का उपयोग नहीं करना होगा या अजीब त्रुटि संदेश नहीं मिलेगा।
एरविन ब्रांडस्टेट्टर


8
@ErwinBrandstetter समस्या तब है जब आप किसी स्थापित प्रोजेक्ट पर काम करते हैं।
ceruleus

5
@ HoàngLong हाँ यह करता है। update "user" set "password" = 'value...';पूरी तरह से ठीक काम करता है ...
फिल

0

यदि आप किसी भी फ़ील्ड / कॉलम में उद्धरण प्रदान नहीं कर रहे हैं, तो यह डिफ़ॉल्ट रूप से Postgres द्वारा कम हो जाएगा। और कॉलम नाम पर आते ही पोस्टग्रैजर्ड कीवर्ड को चेक करना छोड़ देगा।

आपके मामले में, मुझे नहीं लगता कि जब यह आता है तो उद्धरण जोड़ना अनिवार्य है columns। लेकिन अगर आप उपयोग कर रहे हैं keywords(Postgres द्वारा पंजीकृत) के नाम के रूप में Table, Schema, Functionया Triggerआदि, आप या तो दोहरे उद्धरण चिह्नों का उपयोग करना चाहिए, या आप डॉट संयोजन के साथ स्कीमा नाम निर्दिष्ट कर सकते हैं।

मान लीजिए, आदेश पोस्टग्रेज द्वारा पंजीकृत कीवर्ड है। और कुछ परिदृश्यों में, आपको इस कीवर्ड को तालिका नाम के रूप में उपयोग करना होगा।

उस समय, Postgres आपको एक तालिका बनाने की अनुमति देगा keywords। वह है पोस्टग्रेज की खूबसूरती।

आदेश तालिका तक पहुंचने के लिए, या तो आपको एक दोहरे उद्धरण का उपयोग करना होगा या आप तालिका के नाम से पहले स्कीमा नाम का उपयोग कर सकते हैं।

ईजी

1।

select * from schema_name.order;

2।

select * from "order";

इसी तरह, आप इस प्रकार के संयोजन का उपयोग कर सकते हैं। आशा है कि यह आपकी मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.