2011-06-13 14 views
20

पर क्वेरी करने के लिए डबल कोट को छोड़कर सरल प्रश्न, क्या PostgreSQL में डबल कोट को छोड़ने का कोई तरीका है?PostgreSQL

यहाँ, एक उदाहरण है select * from A; दे रही है, मैं ERROR: relation "a" does not exist प्राप्त करेंगे, और मैं वास्तविक परिणाम प्राप्त करने के select * from "A"; देने के लिए करना होगा।

क्या कोई दूसरा तरीका नहीं है और पोस्टग्रेएसक्यूएल पर पहले ऐसा करें?

उत्तर

36

इस क्वेरी के साथ आपकी समस्या तब शुरू हुई जब आपने अपनी तालिका बनाई थी। जब आप अपनी टेबल बनाते हैं, उद्धरणों का उपयोग न करें।

इस का उपयोग करें:

CREATE TABLE a (...); 

इस नहीं:

CREATE TABLE "A" (...); 

बाद यह कर देगा, ताकि आप इसे बाद में उद्धृत करने के लिए किया है। पूर्व यह एक सामान्य नाम बनाता है और आप SELECT * FROM a; या SELECT * FROM A;

उपयोग कर सकते हैं तो आप सिर्फ अपनी मेज पुन: नहीं कर सकते, ALTER TABLE सिंटैक्स का उपयोग करें:

ALTER TABLE "A" RENAME TO a; 
+3

मैं टेबल निर्माता विज़ार्ड का उपयोग करता हूं, और हर बार जब मैं पूंजी-पत्र के साथ लिखता हूं, तो यह स्वचालित रूप से डबलक्वाइट – zfm

+2

जोड़ देगा, मैंने टेबल निर्माता विज़ार्ड का कभी भी उपयोग नहीं किया है, लेकिन मुझे लगता है कि ऐसा करने के लिए सॉफ़्टवेयर में कोई विकल्प नहीं है। पोस्टग्रेज़ में टेबल नाम उद्धृत करना बहुत आम बात नहीं है। यह सिर्फ आपके जीवन को कठिन बनाता है। –

+1

जब मैंने "विज़ार्ड" कहा, तो यह 'pgAdmin III' – zfm

11

दोहरे उद्धरण चिह्नों के लिए आवश्यक हैं अगर आप postgres

आवश्यकताओं अपनी मेज नाम "एक"

+0

अच्छा जवाब ... क्या कोई कारण है कि PostgreSQL ऐसा करता है (हमें पूंजी-पत्र तालिका के लिए डबलक्वॉट डालने के लिए मजबूर करता है)? – zfm

+2

हां, कारण यह है कि "एएनएसआई मानक ऐसा कहता है"। – PhilHibbs

7

Postgresql के हवाले से और मामले sentivity के संबंध में कुछ particular behaviour है से बचने के लिए अपनी मेज नाम पर बड़े अक्षरों में शामिल हैं: यह प्रत्येक गैर-उद्धृत पहचानकर्ता को कम मामले (निर्माण समय पर भी) में जोड़ता है और फिर केस-सेंसिटिव रूप से काम करता है।

पहचानकर्ता में डबल उद्धरण केवल जरूरत है जब तालिका नाम (या फ़ील्ड नाम या जो कुछ भी) परिभाषित किया गया था (स्कीमा निर्माण समय):

    बड़े अक्षरों (कुछ या सभी) उद्धरण के साथ
  • साथ
    • :

    उस मामले में (के खिलाफ जो मैं सलाह), तो आपको निम्न जब एक प्रश्न में यह जिक्र करना चाहिए 363,210

  • केस संवेदी (प्रकार ऊपरी/निचले मामले बिल्कुल के रूप में परिभाषित किया गया पत्र)
  • उपयोग उद्धरण

अन्य मामले में, आप गैर उद्धृत पहचानकर्ता का उपयोग कर सकते हैं (सिवाय अगर वे, उन्हें जरूरत निश्चित रूप से) और काम हमेशा मामला असंवेदनशील।

+0

"... और केस-असुरक्षित मोड में काम करें"। यह वास्तव में कैसे करें? – zfm

+0

@zfm: स्टीव कहते हैं। आप अपने पहचानकर्ता को कम मामले के साथ बनाते हैं (या उद्धरण के बिना - यह वही बात है), और फिर आप उन्हें केस-असंवेदनशील मोड (उन्हें उद्धृत नहीं) में उपयोग कर सकते हैं। – leonbloy

+0

क्षमा करें मैं आपकी सजा गलत व्याख्या करता हूं। मैंने सोचा कि उस मोड को बदलने का एक विकल्प है: डी – zfm

0

कृपया क्या here हो रही घटनाओं का विस्तृत वर्णन देखना ।

PostgreSQL सर्वर तालिका नाम केस संवेदी है, लेकिन डिफ़ॉल्ट रूप से लोअर केस होने के लिए मजबूर कर रहे हैं: जब आप लिखते हैं CREATE TABLE AAA, यह क्वेरी निष्पादन से पहले CREATE TABLE aaa बन जाएगा।

डबल-उद्धृत नाम उनके मामले को बनाए रखते हैं, इसलिए CREATE TABLE "AaA" के बाद आपको तालिका AaA मिलती है और इसे बार-बार दोहराया जाना चाहिए।

पता नहीं क्यों वे इतना :) क्या किया है

2

अपनी मेज नाम पर अपर केस अक्षर का उपयोग न करें या यह स्तंभ नाम है यदि आप इसे तक पहुँचने के लिए इस तरह के बात तो postgres आवश्यक होगा दोहरे उद्धरण का उपयोग कर रहे ।