PostgreSQL में 'उपयोगकर्ता' नामक एक डेटाबेस तालिका नहीं बना सकता


93

ऐसा लगता है कि PostgreSQL 'उपयोगकर्ता' नाम की एक डेटाबेस तालिका बनाने की अनुमति नहीं देता है। लेकिन MySQL ऐसी तालिका बनाने की अनुमति देगा।

क्या इसलिए कि यह एक महत्वपूर्ण शब्द है? लेकिन हाइबरनेट किसी भी मुद्दे की पहचान नहीं कर सकता है (भले ही हम पोस्टग्रेसीक्यूडायल्ट सेट करें)।


2
हां, उपयोगकर्ता एक आरक्षित कीवर्ड है। बस इसे तालिका नाम के रूप में उपयोग न करें। postgresql.org/docs/9.3/static/sql-keywords-appendix.html
JB Nizet

आप postgreSQL पर 'उपयोगकर्ता' नाम की एक तालिका बना सकते हैं। लेकिन मैं आपको सलाह देता हूं कि टेबल / कॉलम / चरों का उपयोग करने से बचें ... टोकन कीवर्ड का उपयोग करने वाले नाम
होउरी

तो क्षमा करें यह कोई डुप्लिकेट प्रश्न नहीं है। प्रश्न Mygrql के साथ किसी चीज़ के बारे में नहीं postgresql के बारे में है। धन्यवाद।
चन्ना

जवाबों:


142

user एक आरक्षित शब्द है और यह आमतौर पर एक अच्छा विचार नहीं है कि पहचानकर्ता (टेबल, कॉलम) के लिए आरक्षित शब्द का उपयोग करें।

यदि आप ऐसा करने पर जोर देते हैं, तो आपको टेबल का नाम डबल कोट्स में रखना होगा:

create table "user" (...);

लेकिन तब आपको तालिका को संदर्भित करते समय हमेशा दोहरे उद्धरण चिह्नों का उपयोग करने की आवश्यकता होती है। इसके अतिरिक्त तालिका का नाम तब केस-संवेदी है। "user"से भिन्न नाम है "User"

यदि आप अपने आप को बहुत परेशानी से बचाना चाहते हैं तो एक अलग नाम का उपयोग करें। users, user_account...

उद्धृत पहचानकर्ताओं पर अधिक विवरण मैनुअल में पाए जा सकते हैं: http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS


दुर्भाग्य से यह एक हाइबरनेट-आधारित परियोजना में एक उत्तर नहीं है, जैसा कि विषयवस्तु =) में वर्णित है। यहां वास्तविक समस्या हाइबरनेट की विफलता है जो स्वचालित रूप से भागने की तरह है। उचित बोली कहने के बावजूद! तो उचित उत्तर में वर्णन करना चाहिए कि हाइबरनेट में काम कैसे करना है, पीएसक्यूएल में नहीं :(
मैक्सिम

3
@MaksimGumerov: उचित उत्तर है: उन नामों का उपयोग न करें जिनके लिए उद्धृत पहचानकर्ताओं की आवश्यकता होती है - भले ही आप उपयोग कर रहे हों।
a_horse_with_no_name

नहीं है कि एक नहीं है :) आप अपने कोड को विशिष्ट डेटाबेस और उसके कीवर्ड (और यह सेट परिवर्तनों के अधीन है) को समाप्त कर देंगे। एक वास्तविक समाधान विश्व स्तर पर भागने की बारी है (हालांकि इसे स्वयं प्रयास नहीं किया गया है), एक और हाइबरनेट बोली विश्लेषणकर्ताओं पर भरोसा है (लेकिन जैसा कि हम देखते हैं, वे हमेशा यह निर्धारित करने में अपना काम नहीं करते हैं कि क्या हमें कुछ बचने की जरूरत है)।
मकिसिम गुमेरोव

@MaksimGumerov बिंदु यह है कि आप उपयोगकर्ता नाम की तालिका नहीं बना सकते क्योंकि यह डेटाबेस द्वारा आरक्षित है।
IamDOM

यकीन है कि मैं कर सकता हूँ - एक के लिए उद्धरण का उपयोग कर। हो सकता है कि मैं भी नहीं, लेकिन यह भी यकीन है। क्या अधिक महत्वपूर्ण है कि मैं इस तरह की एक तालिका कैसे बनाऊं, और यहां प्रस्तावित समाधान (उद्धरण के साथ) हाइबरनेट परियोजनाओं में मदद नहीं करेगा। और प्रारंभिक प्रश्न में हाइबरनेट का उल्लेख किया गया है, इसलिए उत्तर वास्तव में इसका उत्तर पर्याप्त आईएमओ नहीं देता है।
मकिसिम गुमेरोव

18

अगले सिंटैक्स के साथ जेपीए के साथ टैबलेनम निर्दिष्ट करना संभव है:

@Table(name="\"user\"")

इससे मेरी समस्या हल हो गई। इसके बिना मुझे गलतियाँ मिल रही थींcolumn user0_.id does not exist
जेम्स फ्रीटस

7

हम इस एक ही मुद्दा समय पहले किया था, और हम सिर्फ से तालिका नाम बदल दिया है userकरने के लिए app_user। हाइबरनेट / जेपीए के उपयोग के कारण। हमने सोचा कि यह इस तरह से आसान होगा। उम्मीद है कि इस छोटे से सुधार से किसी और को मदद मिलेगी।


यही काम किया।
स्टीफन फॉक

1

userस्कीमा के अलावा अन्य तालिका बना सकते हैं public। उदाहरण:

CREATE SCHEMA my_schema;
CREATE TABLE my_schema.user(...);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.