2011-06-10 18 views
6

मेरे पास थोड़ा मूर्ख सवाल है। मैंने एक PostgreSQL डीबी सर्वर स्थापित किया है, लेकिन जब मैं क्वेरी चलाता हूं, उद्धरण के बिना कॉलम पहचानकर्ता के साथ कोई समस्या है। मुझे नहीं पता कि पहचानकर्ताओं के आस-पास के उद्धरणों की आवश्यकता क्यों है। मेरे प्रश्न:।PostgreSQL - उद्धरण के बिना क्वेरी वाक्यविन्यास

SELECT vc."CAR_ID" 
    FROM "VEL_CAR" vc, "VEL_DRIVER" vd, "VEL_DRIVER_CAR" vdc 
WHERE vc."CAR_ID" = vdc."CAR_ID" and 
     vdc."DRIVER_ID" = vd."DRIVER_ID"; 

ओरेकल DB से मेरे अभ्यास का उपयोग नहीं कर रहा है "तो Oracle में:

:

SELECT vc.CAR_ID 
    FROM VEL_CAR vc, VEL_DRIVER vd, VEL_DRIVER_CAR vdc 
WHERE vc.CAR_ID = vdc.CAR_ID and 
     vdc.DRIVER_ID = vd.DRIVER_ID; 

यह वाक्य रचना के बारे में त्रुटि फेंकता है जब मैं PostgreSQL में उद्धरण चिह्नों के बिना इस क्वेरी चलाने

ERROR: column vc.car_id does not exist 
LINE 1: SELECT vc.CAR_ID 

क्या तुम जानते हो क्यों?

--SOLVED-- धन्यवाद, अब मैंने समस्या हल की है! यह टेबल निर्माण के बारे में था। मैंने pgAdminIII का उपयोग कर टेबल ऑब्जेक्ट्स बनाए और मैंने टेबल नाम और कॉलम नामों को ऊपरी कैस्ड लिखा। pgAdminIII ने कोटा के साथ क्वेरी बनाई - नामों की वजह से ऊपरी भाग था। तो पूछताछ कोटा के साथ लिखा जाना था।

+0

पोस्टग्रेज़ में केस-सेंसिटीविटी के संबंध में तालिका और फील्ड नामों का कुछ अनोखा प्रबंधन है। –

+2

@ypercube: यह "असामान्य" नहीं है, यह SQL मानक का पालन कर रहा है (और ओरेकल, डीबी 2, फायरबर्ड, एच 2, डर्बी, जैसे व्यवहार करता है ...) –

+1

@veselej एक तरफ नोट: कोटा = संसाधन की मात्रा (डिस्क स्पेस, सीपीयू उपयोग आदि) एक उपयोगकर्ता को दिया; कोटेशन = उद्धरण, उद्धरण चिह्नों (', ") के बीच स्ट्रिंग, तो आप वास्तव में उद्धरणों के बारे में बात कर रहे हैं और यहां कोटा नहीं :-) –

उत्तर

10

जब आप डबल कोट्स, कॉलम और टेबल नामों का उपयोग करके अपनी टेबल बनाते हैं तो केस संवेदनशील हो जाते हैं। (! ध्यान दें लापता उद्धरण): तो "car_id" से "CAR_ID"

आप दोहरे उद्धरण चिह्नों का उपयोग किए बिना अपने टेबल बनाने की आवश्यकता एक अलग नाम है, तो नाम केस संवेदी कर रहे हैं नहीं है car_idCAR_ID रूप में ही है

देखें जानकारी के लिए मैनुअल:

http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

संपादित करें:
ओरेकल सिर्फ उसी तरह व्यवहार करता है। केवल अंतर यह है कि ऊपरी मामले में ओरेकल स्टोर नाम और पोस्टग्रेर्स उन्हें कम मामले में स्टोर करते हैं। लेकिन उद्धरणों का उपयोग करते समय व्यवहार समान है।

0

मुझे लगता है कि तालिका वीसी में car_id नामक कॉलम नहीं है। क्या आप वाकई वहां हैं? तालिका की संरचना देखने के लिए \d vel_car करें।

उद्धरण वैकल्पिक हैं और आप आमतौर पर उन्हें छोड़ सकते हैं।

1

Postgres documentation से:

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

संबंधित मुद्दे