काम करने के लिए सरल PostgreSQL डालने नहीं मिल सकता है


83

मैं पोस्टग्रेज टेबल में एक साधारण इंसर्ट करने की कोशिश कर रहा हूं, लेकिन मुझे एक त्रुटि मिल रही है कि मैं जिस वैल्यू को डालने की कोशिश कर रहा हूं उसे कॉलम नाम के रूप में समझा जा रहा है

INSERT INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT, "auto dealer")

जहां आईडी को प्राथमिक कुंजी, और ऑटो वेतन वृद्धि के लिए सेट किया गया है, और शून्य नहीं है। जब मैं phpPgAdmin में तालिका सेट करता हूं तो वे बॉक्स होते हैं जिन्हें मैंने टिक किया था।

हालांकि मुझे यह त्रुटि मिल रही है:

ERROR: ERROR: column "auto dealer" does not exist
Query = INSERT
INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT,
"auto dealer")

मैंने अपनी तालिका का नाम दोहरे उद्धरण चिह्नों में रखा है, जैसा कि मैंने यहां पढ़ा है कि मुझे क्या करना चाहिए।

और DEFAULTआईडी को ऑटो-इंक्रीमेंट के रूप में इस्तेमाल किया है जैसा कि मैंने यहां पढ़ा है मुझे चाहिए।

कोई विचार? धन्यवाद!


14
'ऑटो डीलर' के लिए सिंगल कोट्स का उपयोग करें।
मुरातगु

3
एकल कोट। आईडी छोड़ दें।
पॉल टॉम्बलिन

@muratgu जो त्रुटि देता है:ERROR: ERROR: syntax error at or near "'imageTagBusinessMainCategory'" Position: 13
1252748

@PaulTomblin का अर्थ है "आईडी को छोड़ दें"? धन्यवाद!
१२५२ --४

मेरा मतलब है कि यह @ रैंडी के जवाब में दिखाता है। इसे छोड़कर ऐसा लगता है कि आपको कॉलम नाम के साथ दोहरे उद्धरण चिह्नों की भी आवश्यकता है।
पॉल टॉम्बलिन

जवाबों:


167

'auto dealer'इसके बजाय उपयोग करें । PostgreSQL "पहचानकर्ताओं के लिए उद्धरण के रूप में व्याख्या करता है, 'तार के लिए उद्धरण के रूप में।

इसके अलावा:

  • यदि यह एक नई परियोजना है, तो बस मिश्रित मामले तालिकाओं का उपयोग न करें; यह बाद में हताशा का स्रोत है। अपने SQL बयानों में किसी भी मामले का उपयोग करने में सक्षम होने के बजाय, आपको पहचानकर्ता के नाम को उद्धृत करना चाहिए और मामले को सही करना चाहिए।

  • निर्दिष्ट करने की कोई आवश्यकता नहीं है id/ DEFAULT, आप इसे वही करने के लिए कह रहे हैं जो उसने पहले ही किया होगा। मुझे एक डीबीएमएस नहीं मिला है जिसमें आपको शामिल करने की आवश्यकता है columnName/ DEFAULTयदि आप इसे कॉलम में डिफ़ॉल्ट मान रखना चाहते हैं, तो मुझे नहीं लगता कि यह अतिरिक्त केवी जोड़ी बनाने जा रही है जो आपके कोड को पढ़ने वाले किसी भी व्यक्ति के लिए स्पष्ट हो रहा है। ।


जो मुझे यह त्रुटि देता हैERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
१२५२ Sep४

1
आपने संभवतः तालिका नाम की तरह मिश्रित मामले में कॉलम बनाया है। यदि यह मामला है तो आपको कॉलम नाम भी उद्धृत करना होगा। नामकरण में मिश्रित मामले का उपयोग करना बंद करें, और आप सभी को बहुत दर्द से बचाएंगे।
मैट

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

@itsols "भी" की मुट्ठी गोली उद्धरण की आवश्यकता को समाप्त कर देगी; केवल [a-z0-9] का उपयोग करके अपनी पहचान परिभाषित करें और उन्हें किसी विशेष मामले के रूप में निर्दिष्ट न करें (बिना उद्धरण के परिभाषित करें)। फिर आप उन्हें हमेशा के लिए उद्धरण के बिना चाहते हैं, लेकिन उन्हें संदर्भित कर सकते हैं। यदि आप या किसी और ने फैसला किया है कि रिक्त स्थान के साथ या ऊंट के मामले में तालिका के नाम होना वास्तव में महत्वपूर्ण था, तो हर जगह मज़े करना!
मैट

अच्छी तरह से मैट लिया बिंदु ... मुझे लगता है कि मैं बस एक तरह से CamelCase के लिए इस्तेमाल किया है - यह एक लंबे समय (20 साल से अधिक) हो गया है ... वास्तव में परेशानी दोहरे-उद्धरण में नहीं है (हाँ, यह आसान होगा इसके बिना), लेकिन असली दर्द उन्हें तार में बचने के लिए हो रहा है। मैंने इसे तब तक नहीं देखा जब तक मैंने C ++ और pg को एक साथ नहीं रखा। आपके इनपुट के लिए वैसे भी धन्यवाद!
इसकी जूल

9
INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')

संपादित करें: कॉलम नाम के आसपास दोहरे उद्धरण जोड़े गए


1
धन्यवाद। यह त्रुटि देता है:ERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
16:27 पर 1252748

लगता है जैसे आपको कॉलम का नाम डबल-कोट्स में रखना होगा। PostgreSQL में मिश्रित-केस तालिका के नाम का एक कारण एक बुरा विचार है।
डेविड फेबर

@DavidFaber हाँ, तुम सही हो। हालांकि इसे पढ़ना थोड़ा मुश्किल है .. क्या मैं डैश का उपयोग कर सकता हूं? ^ ^
1252748

1
@ डेविडफैबर: व्यक्तिगत रूप से मुझे लगता है कि पहचानकर्ता जिन्हें उद्धृत करने की आवश्यकता है (जैसे मिश्रित मामला) किसी भी डीबीएमएस में एक बुरा विचार है
a_horse_with_no_name

1
ध्यान रखें कि पहचानकर्ता को बनाते समय हर जगह EXCEPT, आप इसे मिश्रित मामले में और उद्धरण के बिना संदर्भित कर सकते हैं। तो नाम वाली तालिका thishasareallylongnameका उपयोग करके पहुँचा जा सकता है select * from thisHasAReallyLongName
मैट

4

पोस्टग्रेज, ओरेकल आदि स्तंभ नाम को उद्धरण में होने की उम्मीद करते हैं यदि उनके पास मिश्रित मामला है। तो या तो अपने टेबल कॉलम के लिए सभी छोटे या सभी कैप का एक सम्मेलन बनाएं या डेविड फेबर द्वारा सुझाए गए उद्धरणों का उपयोग करें

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.