PostgreSQL এ 'ব্যবহারকারী' নামে একটি ডাটাবেস টেবিল তৈরি করতে পারে না


94

দেখে মনে হচ্ছে PostgreSQL 'ব্যবহারকারীর' নামে একটি ডাটাবেস টেবিল তৈরি করার অনুমতি দেয় না। তবে মাইএসকিউএল এই জাতীয় একটি টেবিল তৈরি করার অনুমতি দেবে।

এটি কি কারণ এটি একটি মূল শব্দ? তবে হাইবারনেট কোনও সমস্যা সনাক্ত করতে পারে না (এমনকি আমরা পোস্টগ্র্যাসকিউসিএলডায়াল্ট সেট করে নিই)।


4
হ্যাঁ, ব্যবহারকারী একটি সংরক্ষিত কীওয়ার্ড। এটি কেবল একটি টেবিলের নাম হিসাবে ব্যবহার করবেন না। postgresql.org/docs/9.3/static/sql-keywords-appendix.html
জেবি নিজেট

আপনি পোস্টগ্রিজ এসকিউএলে 'ব্যবহারকারী' নামে একটি সারণী তৈরি করতে পারেন। তবে আমি আপনাকে সারণী / কলাম / ভেরিয়েবলগুলি ব্যবহার করা ... টোকেন কীওয়ার্ড ব্যবহার করে নামগুলি এড়াতে পরামর্শ
দিই

সুতরাং দুঃখিত এটি কোনও সদৃশ প্রশ্ন নয়। প্রশ্নটি মাইএসকিএল-এর কোনও জিনিস নিয়ে নয়, পোস্টগ্রিজ্কল সম্পর্কে। ধন্যবাদ
চান্না

উত্তর:


145

user একটি সংরক্ষিত শব্দ এবং এটি শনাক্তকারীদের (সারণী, কলাম) জন্য সংরক্ষিত শব্দ ব্যবহার করা ভাল ধারণা নয়।

যদি আপনি এটি করার জন্য জেদ করেন তবে আপনাকে টেবিলের নামটি ডাবল উদ্ধৃতিতে রাখতে হবে:

create table "user" (...);

তবে তারপরে সারণীতে রেফারেন্স করার সময় আপনার সর্বদা ডাবল উদ্ধৃতি ব্যবহার করা উচিত। অতিরিক্তভাবে সারণির নামটি তখন কেস-সংবেদনশীল। "user"এর চেয়ে আলাদা টেবিলের নাম "User"

আপনি যদি নিজেকে বাঁচাতে চান তবে আলাদা নাম ব্যবহার করুন। users,, user_account...

উদ্ধৃত শনাক্তকারী উপর আরো বিস্তারিত ম্যানুয়াল পাওয়া যাবে: http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS


দুর্ভাগ্যক্রমে এটি হাইবারনেট-ভিত্তিক প্রকল্পে কোনও উত্তর নয়, যেমন টপিকস্টার্টার উল্লেখ করেছেন =) এখানে আসল সমস্যাটি হাইড্রনেট এর স্বয়ংক্রিয়ভাবে পালানোর ক্ষেত্রে ব্যর্থতা। যথাযথ উপভাষা বলা হলেও! সুতরাং সঠিক উত্তরে
পিএসকিউএলে

4
@ ম্যাক্সিম গুমেরোভ: সঠিক উত্তরটি: এমন নাম ব্যবহার করবেন না যার জন্য উদ্ধৃত শনাক্তকারীদের প্রয়োজন - আপনি যে অবসন্ন স্তরটি ব্যবহার করছেন তা নির্বিশেষে।
a_horse_with_no_name

না হ'ল না এটি :) আপনি নির্দিষ্ট কোডটি এবং এর কীওয়ার্ডগুলিতে আপনার কোডটি বেঁধে শেষ করবেন (এবং এই সেটটি পরিবর্তন সাপেক্ষে)। একটি আসল সমাধান হ'ল বিশ্বব্যাপী পালিয়ে যাওয়া (যদিও এটি নিজে চেষ্টা করে দেখেনি), অন্যটি হাইবারনেট ডায়ালেক্ট বিশ্লেষকদের উপর নির্ভর করে (তবে আমরা দেখতে পাচ্ছি যে, আমাদের কোনও কিছু থেকে বাঁচার দরকার আছে কিনা তা নির্ধারণে তারা সর্বদা তাদের কাজ করে না)।
মাকসিম গুমেরোভ

@ ম্যাক্সিম গুমেরোভের মুল বক্তব্যটি হ'ল আপনি ব্যবহারকারীর নামের সারণী তৈরি করতে পারবেন না কারণ এটি ডেটাবেস দ্বারা সংরক্ষিত।
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(...);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.