क्या PostgreSQL कॉलम नाम केस-संवेदी हैं?


157

मेरे पास एक db तालिका है, personsपोस्टग्रेज में एक अन्य टीम द्वारा दिया गया है, जिसके पास एक कॉलम नाम है, कहते हैं "first_Name"। अब इस स्तंभ-नाम पर इस तालिका को क्वेरी करने के लिए PG कमांडर का उपयोग करने का प्रयास कर रहा हूं।

select * from persons where first_Name="xyz";

और यह सिर्फ लौटता है

त्रुटि: कॉलम "first_Name" मौजूद नहीं है

यकीन नहीं होता कि मैं कुछ मूर्खतापूर्ण कर रहा हूं या क्या इस समस्या का कोई हल है जो मुझे याद आ रहा है?

जवाबों:


284

सभी पहचानकर्ता (स्तंभ नाम सहित) जो दोहरे-उद्धृत नहीं हैं, उन्हें पोस्टग्रेक्ज़क्यूएल में निचले मामले में जोड़ दिया जाता है। स्तंभ के नाम जो दोहरे उद्धरण चिह्नों के साथ बनाए गए थे और इस तरह ऊपरी मामले के अक्षरों (और / या अन्य वाक्यविन्यास उल्लंघन) को बरकरार रखा गया था, उनके जीवन के बाकी हिस्सों के लिए दोहरे-उद्धरण होने चाहिए: ( "first_Name")

तो, हाँ , PostgreSQL कॉलम नाम केस-संवेदी हैं:

SELECT * FROM persons WHERE "first_Name" = 'xyz';

इसके अलावा गलत डबल-कोट्स को भी ठीक करें 'xyz'मान (स्ट्रिंग शाब्दिक) एकल उद्धरणों में संलग्न हैं ।

यहां मैनुअल पढ़ें।

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


4
@ArtB: SQL मानक असंवेदनशील पहचानकर्ताओं को परिभाषित करता है, ठीक उसी तरह जैसे यह अपग्रेड लागू करता है। एकमात्र विचलन: निर्विवाद पहचानकर्ता मानक में ऊपरी मामले में मुड़ा हुआ है, लेकिन निम्न-मामलों में वह सब कुछ है जो दोहरे-उद्धृत नहीं है। (केवल दुर्लभ कोने के मामलों में प्रासंगिक।) यहां मैनुअल में विवरण।
इरविन ब्रान्डसेट्टर

1
@adfs: मुझे नहीं लगता कि मैं इसे पहले से बताए गए किसी भी बेहतर तरीके से समझा सकता हूं। अधिक जानकारी के लिए, बार-बार दिए गए मैनुअल के लिंक का पालन करें।
एरविन ब्रान्डसेट्टर

15
@adfs: SQL में foobar, FOOBARऔर FooBarसमान पहचानकर्ता हैं। हालाँकि "foobar", "FooBar"और "FOOBAR"विभिन्न पहचानकर्ता हैं
a_horse_with_no_name

5
@a_horse_with_no_name हाँ, लेकिन SQL के तहत foobarऔर FOOBARजैसे ही हैं "FOOBAR", potgresql के तहत FOOBARऔर foobarआदि समान हैं "foobar"
जैसन

1
@KamelMili: मैं आपके प्रश्न को प्रश्न के रूप में पूछने का सुझाव देता हूं , सभी आवश्यक जानकारी प्रदान करता हूं । टिप्पणियाँ जगह नहीं हैं। आप संदर्भ के लिए हमेशा इस उत्तर से जुड़ सकते हैं। और आप अपने संबंधित प्रश्न के लिंक के साथ एक टिप्पणी यहां छोड़ सकते हैं (मेरा ध्यान आकर्षित करने के लिए)।
इरविन ब्रान्डेसटेटर

16

प्रलेखन उद्धृत करने के लिए :

मुख्य शब्द और अयोग्य पहचानकर्ता असंवेदनशील हैं। इसलिए:

UPDATE MY_TABLE SET A = 5;

समान रूप से लिखा जा सकता है:

uPDaTE my_TabLE SeT a = 5;

आप इसे उद्धृत पहचानकर्ताओं का उपयोग करके भी लिख सकते हैं :

UPDATE "my_table" SET "a" = 5;

एक पहचानकर्ता का हवाला देते हुए इसे केस-संवेदी बना दिया जाता है, जबकि अयोग्य नामों को हमेशा निचले मामले में जोड़ दिया जाता है (SQL मानक के विपरीत जहाँ बिना नाम के ऊपरी मामले में जोड़ दिया जाता है)। उदाहरण के लिए, पहचानकर्ता FOO, fooऔर "foo"PostgreSQL से ही माना जाता है, लेकिन कर रहे हैं "Foo"और "FOO"इन तीन और एक दूसरे से अलग हैं।

यदि आप पोर्टेबल एप्लिकेशन लिखना चाहते हैं तो आपको सलाह दी जाती है कि आप किसी विशेष नाम को हमेशा उद्धृत करें या कभी भी उद्धृत न करें।


8

मिश्रित नाम या अपरकेस जो स्तंभ नाम हैं, उन्हें PostgresQL में डबल उद्धृत किया जाना है। तो सबसे अच्छा सम्मेलन अंडरस्कोर के साथ सभी छोटे मामले का पालन करना होगा।


2
यह @ erwin-brandstetter
माइकल सिल्वर

9
यह कैसे गलत है? यदि आपके पास स्तंभ नाम हैं जो मिश्रित मामले या ऊपरी मामले हैं, तो उन्हें संदर्भित करने के लिए आपको पहचानकर्ता को दोहरे उद्धरण चिह्नों में रखने की आवश्यकता है।
theferrit32
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.