PostgreSQL কি কেস সংবেদনশীল ডাটাবেস তৈরি করতে পারে?


10

আমি সাইবাসের কিছু সংস্করণ থেকে পোস্টগ্রিজ এসকিউএলে কিছু কোড পোর্ট করছি। এটি সি সি অ্যাপ্লিকেশন যা সাইবাস গ্রাহক লাইব্রেরি ব্যবহার করে। আমার পদ্ধতিটি এমন একটি অনুবাদ স্তর লিখুন যা কলগুলিতে অনুবাদ dbsqlexec()করে PQexec()(উদাহরণস্বরূপ)। সেই অংশটি বেশিরভাগ ক্ষেত্রেই কাজ করছে।

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

৪.১ লেক্সিকাল স্ট্রাকচার অনুসারে , " মূল শব্দ এবং অব্যক্ত শনাক্তকারীরা কেস সংবেদনশীল " "আমি জানি যে আমি ছোট হাতের অক্ষরে স্বয়ংক্রিয় ফোল্ডিং অক্ষম করতে শনাক্তকারীদের ডাবল-কোট করতে পারি, তবে আমি জিলিয়ন লাইনের মাধ্যমে ম্যানুয়ালি তা করতে চাই না don't এই ডাটাবেস ব্যবহার করে এমন কোডের।

ডাটাবেস অবজেক্ট শনাক্তকারীদের জন্য এই স্বয়ংক্রিয় কেস ফোল্ডিংটি অক্ষম করার জন্য PostgreSQL সেট করার কোনও উপায় আছে কি?

আমার বিকল্পটি এমন কিছু কোড লিখতে হবে যা প্রতিটি এসকিউএল স্টেটমেন্ট পরীক্ষা করে এবং প্রতিটি সনাক্তকারী (এটি কোনও কীওয়ার্ড নয়) এর চারপাশে ডাবল কোট রাখে।


ডাবল উদ্ধৃত হলে কীওয়ার্ডগুলি সনাক্তকারী হিসাবে ব্যবহার করা যেতে পারে - যদিও আপনার এটি করা উচিত নয়। যাই হোক না কেন, আপনি নিশ্চিত হতে পারবেন না যে আপনার সিবেস কোড বেস থেকে কিছু সনাক্তকারী পোস্টগ্র্রেএসকিউএল-তে কীওয়ার্ড নয়। ডাবল-উদ্ধৃতি শনাক্তকারীদের বা আরও বেশি কারণ, সম্ভবত তাদের নাম পরিবর্তন করুন name
এরউইন ব্র্যান্ডসেটেটার

পোস্টগ্রিসে অনাবৃত শনাক্তকারীরা আসলে মোটেই সংবেদনশীল নয়, এগুলি সমস্ত নিম্নতর ক্ষেত্রে হিসাবে বিবেচনা করা হয়। সুতরাং tBbeeNeMe একক টেবিলের সাথে মেলে যা টেবিলনাম নামে পরিচিত তবে একটি নাম টেবিলনাম নয়। আমি টেবিলগুলির নাম পরিবর্তন করব কারণ অন্যথায় লোকেরা "ভুলে যাবে এবং ভুল করে ছোট হাতের সংস্করণটি অ্যাক্সেস করবে
জেমসআরয়ান

@ জামেসারিয়ান: এটি ভুল। select * from TaBlEnAmEহিসাবে একই টেবিলটি উল্লেখ করবে select * from tablenameবাselect * from TABLENAME
a_horse_with_no_name

@ এ_হর্স_বিহীন_নাম_নাম: আপনি যদি create table "tableName" (id integer primary key);এবং তারপরে create table "tablename" (id integer primary key);এই কোয়েরিটি select * from TaBlEnAmE;"টেবিলনাম" থেকে নির্বাচন করবেন, "টেবিলের নাম" থেকে নয়। "অব্যর্থ নামগুলি সর্বদা ছোট হাতের জন্য ভাজ করা হয়"
মাইক শেরিল 'ক্যাট রিকল'

উত্তর:


3

আমি এমন কিছু কোড লেখা শেষ করেছি যা অ্যাপ্লিকেশন দ্বারা উত্পাদিত এসকিউএলকে পোস্টগ্রেএসকিউএল-সামঞ্জস্যপূর্ণ এসকিউএল রূপান্তর করে। এটি বেশ সোজা:

  • একক-উদ্ধৃত স্ট্রিং ল্যাটারালগুলি এড়িয়ে বুদ্ধিমান টোকেনগুলিতে বিবৃতিটি বিভক্ত করুন
  • কোনও কীওয়ার্ড বা সংখ্যা নয় এমন কোনও কিছু ডাবল-কোট করুন

আমিও কল রুপান্তর এই স্তর সুবিধা গ্রহণ isnullকরার জন্য coalesce। এখনও পর্যন্ত এটি বেশ ভালভাবে কাজ করছে।


কেস কে সংবেদনশীল করে তুলতে আমি উদ্ধৃতি ("ব্লেব্লাবলাহ") ব্যবহার করি .. এটি আমার পক্ষে মসৃণ কাজ করে ..
অনুজ প্যাটেল

1

ডাটাবেস অবজেক্ট শনাক্তকারীদের জন্য এই স্বয়ংক্রিয় কেস ফোল্ডিংটি অক্ষম করার জন্য PostgreSQL সেট করার কোনও উপায় আছে কি?

সরাসরি নয় আপনি পারে একটি অপেক্ষাকৃত গৌণ পরিবর্তন করতে সক্ষম হতে পোস্টগ্রি সোর্স কোড , এবং এটি কম্পাইল। (এসআরসি / ব্যাকএন্ড / পার্সার / পার্সার.সি থেকে শুরু করুন?) তবে আমি যদি খুব সহজ হত তবে অবাক হব।


আমি বরং সোর্স কোডটি নিয়ে গণ্ডগোল করব না, কারণ প্রতিবার যে কোনও কিছু পরিবর্তিত (হোস্ট, সংস্করণ, ইত্যাদি), এবং বাইনারি ইনস্টলগুলি উপলভ্য হবে না এমন PostgreSQL ইনস্টলে একটি কাস্টম পরিবর্তন প্রয়োজন।
গ্রেগ হিউগিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.