जवाबों:
ठीक प्रलेखन के अनुसार , मुझे लगता है कि यह वही हो सकता है जो आप खोज रहे हैं।
SQL पहचानकर्ता और प्रमुख शब्द एक अक्षर (az, लेकिन यह भी वर्णनात्मक निशान और गैर-लैटिन अक्षर) या एक अंडरस्कोर (_) अक्षरों के साथ शुरू होना चाहिए। एक पहचानकर्ता या कुंजी शब्द में इसके बाद के अक्षर अक्षर, अंडरस्कोर, अंक (0-9) या डॉलर चिन्ह ($) हो सकते हैं। ध्यान दें कि SQL मानक के अक्षर के अनुसार पहचानकर्ताओं में डॉलर के संकेत की अनुमति नहीं है, इसलिए उनका उपयोग अनुप्रयोगों को कम पोर्टेबल प्रस्तुत कर सकता है ...
pg_
उस लिंक पर अंडरस्कोर जोड़ना चाह सकते हैं , जैसे कि नाथन सी का उल्लेख किया गया है ।
प्रलेखन के अनुसार , यह pg_
आरक्षित होने के साथ शुरू भी नहीं हो सकता है । इसके अलावा यह काफी मुक्त दिखता है।
this-is schema
और यह अभी भी एक अवैध स्कीमा नाम होगा।
सही उत्तर वह है जो 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
।