PostgreSQL स्कीमा नाम के मान्य प्रारूप क्या हैं?


14

मैं ऐसा डाक्यूमेंट नहीं ढूंढ पा रहा हूं जो पोस्टग्रेक्यूएल स्कीमा नाम के वैध प्रारूपों का वर्णन करता हो। मुझे पता है कि स्कीमा नाम नहीं हो सकता है:

  • एक नंबर से शुरू करें
  • रिक्त स्थान हैं
  • के साथ शुरू pg_

और क्या? मुझे कहाँ देखना चाहिए?

जवाबों:


17

ठीक प्रलेखन के अनुसार , मुझे लगता है कि यह वही हो सकता है जो आप खोज रहे हैं।

SQL पहचानकर्ता और प्रमुख शब्द एक अक्षर (az, लेकिन यह भी वर्णनात्मक निशान और गैर-लैटिन अक्षर) या एक अंडरस्कोर (_) अक्षरों के साथ शुरू होना चाहिए। एक पहचानकर्ता या कुंजी शब्द में इसके बाद के अक्षर अक्षर, अंडरस्कोर, अंक (0-9) या डॉलर चिन्ह ($) हो सकते हैं। ध्यान दें कि SQL मानक के अक्षर के अनुसार पहचानकर्ताओं में डॉलर के संकेत की अनुमति नहीं है, इसलिए उनका उपयोग अनुप्रयोगों को कम पोर्टेबल प्रस्तुत कर सकता है ...


धन्यवाद। मैं इन निर्देशों का पालन करूंगा और देखूंगा कि क्या वे मान्य स्कीमा नाम हैं। यदि ऐसा है, तो मैं इसे स्वीकार करूंगा।

pg_उस लिंक पर अंडरस्कोर जोड़ना चाह सकते हैं , जैसे कि नाथन सी का उल्लेख किया गया है
रेमन तयाग

5

प्रलेखन के अनुसार , यह pg_आरक्षित होने के साथ शुरू भी नहीं हो सकता है । इसके अलावा यह काफी मुक्त दिखता है।


धन्यवाद मैं उस सूची में जोड़ दूंगा जिसे स्कीमा का नाम नहीं दिया जा सकता है। दुर्भाग्य से, यह एकमात्र नियम नहीं है, जाहिरा तौर पर। मैं इसे नाम दे सकता हूं this-is schemaऔर यह अभी भी एक अवैध स्कीमा नाम होगा।

3
@ रमन: यह- या यह-स्कीमा मान्य स्कीमा नाम हैं, सख्ती से बोलना। आप भ्रमित हो रहे हैं क्या वैध है के साथ जब यह कहते हुए उद्धृत किया जाना चाहिए
डैनियल वेरिटे

हाँ तुम शायद सही हो। मुझे इस पर गौर करने दो।
रमन तैयाग

3

सही उत्तर वह है जो gsiems द्वारा प्रदान किया गया है। हालाँकि, मैं यह बताना चाहता हूँ कि PostgreSQL के उद्धृत पहचानकर्ताओं पर नियम हैं जिन्हें आप ध्यान में रख सकते हैं। "उद्धृत पहचानकर्ता में कोई भी वर्ण हो सकता है, कोड शून्य वाले चरित्र को छोड़कर। (एक दोहरे उद्धरण शामिल करने के लिए, दो दोहरे उद्धरण लिखें।)" ... मामले में कुछ प्रतिबंध भी हैं जिन्हें आप देखना चाहते हैं।

इसलिए यदि आप अपने पहचानकर्ताओं को उद्धृत करने जा रहे हैं, तो आप अपने इच्छित किसी भी चरित्र का उपयोग कर सकते हैं (\ 0 के अपवाद के साथ)। लेकिन यदि आप अपने पहचानकर्ताओं को उद्धृत नहीं कर रहे हैं, तो आपको उस पृष्ठ पर उल्लिखित नियमों का पालन करना होगा।

मैं इसे मुख्य रूप से इंगित करना चाहता था क्योंकि यह मुझे पहले काट चुका है, विशेष रूप से गैर-उद्धृत पहचानकर्ताओं में मामले से संबंधित नियम (और स्कीमा नाम पहचानकर्ता के रूप में गिना जाता है)।

अपडेट करें:

एक उदाहरण के रूप में (स्कीमा पहचानकर्ताओं के लिए विशेष रूप से लागू नहीं, लेकिन उनके लिए समान रूप से लागू):

    DROP TABLE "tbluser"; -- assuming it exists
    DROP TABLE "TBLUSER"; -- assuming it exists; incidentally, they are two different tables
    CREATE TABLE "TBLUSER" ( username text ); 
    INSERT INTO "TBLUSER" VALUES ( 'joe' ); 
    SELECT * FROM TBLUSER; -- this returns an error that the tbluser relation does not exist
    SELECT * FROM "TBLUSER"; -- works fine

यह उन लोगों के लिए अपेक्षित व्यवहार हो सकता है जो PostgreSQL (और शायद SQL मानकों) के साथ अनुभवी हैं, लेकिन कोई है जो PG के लिए नया है और अन्य डेटाबेस सर्वर (उदाहरण के लिए SQL सर्वर या Oracle) के दृष्टिकोण से आ रहा है इस व्यवहार में टकरा सकता है और आश्चर्य है कि उनके द्वारा बनाई गई तालिका क्यों गायब है।

शायद कुछ मैनुअल उद्धृत किए गए पहचानकर्ताओं का उपयोग करने के खिलाफ सलाह देते हैं, लेकिन इस मामले का तथ्य यह है कि उद्धृत पहचानकर्ता उपयोग के लिए उपलब्ध हैं और इसका उपयोग किया जा सकता है और इसके अलावा, कई पैकेज इसे ऐसे संबंधक का उपयोग करने की नीति बनाते हैं जो संबंध नहीं बनाते और पहुंचते हैं। पूरी तरह से लोअरकेस, उदाहरण के लिए, PGAdmin III।

उदाहरण के लिए, यह UI के माध्यम से एक तालिका बनाते समय PGAdmin III द्वारा उत्पन्न स्क्रिप्ट है:

    CREATE TABLE public."TBLUSER"
    (
      username text
    ) 
    WITH (
      OIDS = FALSE
    )
    ;

इसलिए, जिस तरह से एक उपयोगकर्ता क्वेरी में इस तालिका तक पहुंच सकता है, वह उसके उद्धृत पहचानकर्ता, अर्थात "TBLUSER"। एक गैर-उद्धृत पहचानकर्ता के साथ क्वेरी में इस तालिका तक पहुंचने की कोशिश करने से रिश्ते का पता लगाने में विफलता हो जाएगी, अर्थात TBLUSER


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