PostgreSQL কলামের নামগুলি কি সংবেদনশীল?


157

আমার একটি ডিবি টেবিল আছে, personsপোস্টগ্রিসে অন্য একটি দলের হাতে দেওয়া কলামের নাম আছে বলে "first_Name",। এই কলাম-নামটিতে এই টেবিলটি জিজ্ঞাসা করার জন্য এখন পিজি কমান্ডার ব্যবহার করার চেষ্টা করছি।

select * from persons where first_Name="xyz";

এবং এটি কেবল ফিরে আসে

ত্রুটি: "প্রথম_নাম" কলামটি বিদ্যমান নেই

নিশ্চিত না যে আমি নির্বোধ কিছু করছি বা এই সমস্যাটি থেকে আমি যে অনুপস্থিত রয়েছি তার কোন সমাধান রয়েছে?

উত্তর:


284

সমস্ত সনাক্তকারী (কলামের নাম সহ) যা ডাবল-কোটেড নয় তা পোস্টগ্রাইএসকিউএল-এ ছোট আকারে ভাঁজ করা হয়। কলামের নামগুলি যা ডাবল-কোট দিয়ে তৈরি করা হয়েছিল এবং এরপরে উচ্চ-অক্ষরের অক্ষরগুলি (এবং / অথবা অন্যান্য সিনট্যাক্স লঙ্ঘন) ধরে রেখেছে তাদের সারা জীবন ডাবল-কোট করতে হবে: ( "first_Name")

সুতরাং, হ্যাঁ , পোস্টগ্রাইএসকিউএল কলামের নামগুলি কেস-সংবেদনশীল:

SELECT * FROM persons WHERE "first_Name" = 'xyz';

চারপাশে ভুল ডাবল-কোটসও ঠিক করুন 'xyz'মানগুলি (STRING লিটারেল) এ সংযোজিত হল একক উদ্ধৃতি

ম্যানুয়াল এখানে পড়ুন।

আমার স্থায়ী পরামর্শটি হ'ল আইনী, নিম্ন-মামলার নামগুলি একচেটিয়াভাবে ব্যবহার করা যাতে ডাবল-কোটিংয়ের প্রয়োজন হয় না।


4
@ আর্টবি: এসকিউএল স্ট্যান্ডার্ড কেস সংবেদনশীল শনাক্তকারীদের সংজ্ঞা দেয়, ঠিক যেমন পোস্টগ্র্রেস এটি প্রয়োগ করে। একমাত্র বিচ্যুতি: অব্যক্ত শনাক্তকারীদের স্ট্যান্ডার্ডের ক্ষেত্রে বড় হাতের অক্ষরে ভাঁজ করা হয়, তবে লো-কেসগুলিতে যা ডাবল-কোট হয় না তা pg করুন। (বিরল কোণে কেবল প্রাসঙ্গিক)) এখানে ম্যানুয়ালটিতে বিশদ।
এরউইন ব্র্যান্ডসেটেটার

1
@ এডিএফএস: আমার মনে হয় না যে আমি এর চেয়ে ভাল এর আগে আর কোনও ব্যাখ্যা করতে পারি। আরও তথ্যের জন্য, আমি বারবার সরবরাহ করা ম্যানুয়ালটির লিঙ্কটি অনুসরণ করুন।
এরউইন ব্র্যান্ডসেটেটার

15
@adfs: এসকিউএল, foobar, FOOBARএবং FooBarএকই আইডেন্টিফায়ার হয়। তবে "foobar", "FooBar"এবং "FOOBAR"বিভিন্ন সনাক্তকারী
হলেন

5
@a_horse_with_no_name হ্যাঁ, কিন্তু এসকিউএল অধীনে foobarএবং FOOBARহিসাবে একই "FOOBAR", potgresql অধীনে FOOBARএবং foobarইত্যাদি একই "foobar"
জেসেন

1
@KamelMili: আমি আপনার প্রশ্ন জিজ্ঞাসা করতে সুপারিশ প্রশ্ন , প্রয়োজনীয় সকল তথ্য প্রদান। মন্তব্য জায়গা নয়। আপনি সর্বদা প্রসঙ্গের জন্য এই উত্তরের সাথে লিঙ্ক করতে পারেন। এবং আপনি আপনার সম্পর্কিত প্রশ্নের লিঙ্কটি দিয়ে এখানে একটি মন্তব্য করতে পারেন (আমার দৃষ্টি আকর্ষণ করার জন্যও)।
এরউইন ব্র্যান্ডসেটেটার

16

ডকুমেন্টেশন উদ্ধৃতি :

মূল শব্দ এবং অব্যক্ত শনাক্তকারীগুলি কেস সংবেদনশীল। অতএব:

UPDATE MY_TABLE SET A = 5;

সমানভাবে এই হিসাবে লেখা যেতে পারে:

uPDaTE my_TabLE SeT a = 5;

আপনি এটি উদ্ধৃত শনাক্তকারীদের ব্যবহার করেও লিখতে পারেন :

UPDATE "my_table" SET "a" = 5;

শনাক্তকারীর উদ্ধৃতি এটি কেস-সংবেদনশীল করে তোলে, যেখানে অনাবৃত নামগুলি সর্বদা লোয়ার কেসে ফোল্ড হয় (এসকিউএল স্ট্যান্ডার্ডের বিপরীতে যেখানে অনাবৃত নামগুলি আপার কেসে ফোল্ড করা হয়)। উদাহরণস্বরূপ, সনাক্তকারীগণ FOO, fooএবং "foo"পোস্টগ্র্রেএসকিউএল দ্বারা একই হিসাবে বিবেচিত হয় , এবং "Foo"এবং "FOO"এই তিনটি এবং একে অপরের থেকে পৃথক।

আপনি যদি পোর্টেবল অ্যাপ্লিকেশন লিখতে চান তবে আপনাকে সর্বদা একটি নির্দিষ্ট নামটি উদ্ধৃত করার বা কখনও এটিকে উদ্ধৃত করার পরামর্শ দেওয়া হয় না।


8

মিশ্র ক্ষেত্রে বা বড় হাতের কলামের নামগুলি পোস্টগ্রিসকিউএল-তে ডাবল উদ্ধৃতি দিতে হবে quot সুতরাং সেরা কনভেনশন হ'ল আন্ডারস্কোর সহ সমস্ত ছোট কেস অনুসরণ করা।


2
@ ইরভিন-ব্র্যান্ডসেট্টারের দেওয়া ব্যাখ্যা অনুসারে এটি ভুল
মাইকেল সিলভার

9
এটি কীভাবে ভুল? আপনার যদি কলামের নাম থাকে যা মিশ্র কেস বা আপার কেসযুক্ত, তাদের উল্লেখ করার জন্য আপনাকে শনাক্তকারীকে ডাবল উদ্ধৃতিতে রাখতে হবে।
theferrit32
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.