user
एक आरक्षित शब्द है
. यह current_user
. के लिए एक उपनाम है ।
regress=> SELECT * FROM user;
current_user
--------------
myusername
(1 row)
यदि आप user
. का उपयोग करना चाहते हैं तालिका नाम के रूप में, चूंकि यह एक आरक्षित शब्द है, इसलिए आपको पहचानकर्ता को उद्धृत करना होगा , उदा.:
SELECT id FROM "user";
आपका ओआरएम सभी पहचानकर्ताओं, या कम से कम आरक्षित शब्दों को उद्धृत करना चाहिए। ऐसा करने में विफलता आपके ओआरएम में एक बग है। आप तालिका नाम के रूप में एक गैर-आरक्षित शब्द का उपयोग करके ओआरएम बग के आसपास काम कर सकते हैं।
मुझे लगता है कि यह psql
. में थोड़ा सा मस्सा है कि यह स्वचालित रूप से उन पहचानकर्ताओं को उद्धृत करता है जिन्हें आप बैकस्लैश कमांड में पास करते हैं। तो \d user
काम करेगा लेकिन select * from user
नहीं होगा। आपको \d "user"
write लिखना होगा . केस संवेदनशीलता के साथ भी यही समस्या उत्पन्न होती है जहां \d MyTable
काम करता है लेकिन SELECT * FROM MyTable
काम नहीं करेगा, आपको लिखना होगा SELECT * FROM "MyTable"
।
एक HINT
देना अच्छा रहेगा त्रुटि में इसके बारे में संदेश। दुर्भाग्य से पार्सर और योजनाकार के पास वास्तव में उस समय पर्याप्त जानकारी नहीं होती है जब "कॉलम मौजूद नहीं है" त्रुटि यह जानने के लिए उत्पन्न होती है कि आपने मूल रूप से एक कीवर्ड लिखा था, यह केवल उस बिंदु पर एक फ़ंक्शन स्कैन देखता है।