এসকিউএল, পোস্টগ্রিস ওআইডি, সেগুলি কী এবং কেন সেগুলি কার্যকর?


161

আমি কিছু পোস্টগ্রেএসকিউএল টেবিল তৈরির দিকে তাকিয়ে রয়েছি এবং আমি এতে হোঁচট খেয়েছি:

CREATE TABLE (
...
) WITH ( OIDS = FALSE );

আমি পোস্টগ্র্রেসের দ্বারা সরবরাহিত ডকুমেন্টেশন পড়েছি এবং আমি ওওপি থেকে অবজেক্ট আইডেন্টিফায়ার ধারণাটি জানি কিন্তু তবুও আমি বুঝতে পারি না,

  • কেন এই জাতীয় সনাক্তকারী একটি ডাটাবেসে দরকারী হবে?
  • প্রশ্নগুলি খাটো করার জন্য?
  • এটি কখন ব্যবহার করা উচিত?

আমি কোনো রেফারেন্স মুহূর্তে উদ্ধৃত করার জন্য খুঁজে পাচ্ছি না, কিন্তু অবগতির জন্য আমি শুনেছি যে মাইক্রোসফট অ্যাক্সেস Postgres করার জন্য একটি ফ্রন্ট-এন্ড হিসেবে ব্যবহার উপস্থিতিতে প্রয়োজন oldসিস্টেম কলাম
তুলসী বাউরক

উত্তর:


165

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

আমার অভিজ্ঞতায় বৈশিষ্ট্যটি সাধারণত বেশিরভাগ পোস্টগ্র্যাস-ব্যাক অ্যাপ্লিকেশনগুলিতে অব্যবহৃত থাকে (সম্ভবত কিছু অংশ তারা মানহীন বলে) এবং তাদের ব্যবহারটি মূলত অবহিত করা হয় :

PostgreSQL 8.1 এ ডিফল্ট_ইথ_ইডস ডিফল্টরূপে বন্ধ থাকে; PostgreSQL এর পূর্ববর্তী সংস্করণগুলিতে এটি ডিফল্টরূপে ছিল।

ব্যবহারকারীর টেবিলগুলিতে ওআইডি-র ব্যবহারকে অবহেলিত হিসাবে বিবেচনা করা হয়, সুতরাং বেশিরভাগ ইনস্টলেশনের ক্ষেত্রে এই পরিবর্তনশীলটিকে অক্ষম করা উচিত। যে অ্যাপ্লিকেশনগুলিতে একটি নির্দিষ্ট টেবিলের জন্য ওআইডি দরকার হয় তাদের টেবিলটি তৈরি করার সময় ওআইডিএস সহ নির্দিষ্ট করা উচিত। এই পরিবর্তনটি পুরানো অ্যাপ্লিকেশনগুলির সাথে সামঞ্জস্যের জন্য সক্ষম করা যেতে পারে যা এই আচরণটি অনুসরণ করে না।


33
অয়েডগুলি অনন্য হওয়ার গ্যারান্টিযুক্ত নয়। দস্তাবেজগুলি থেকে: "একটি বৃহত বা দীর্ঘকালীন ডাটাবেসে, কাউন্টারটির চারপাশে মোড়ানো সম্ভব Hence সুতরাং, ওআইডিগুলি অনন্য বলে ধরে নেওয়া খারাপ অভ্যাস, যদি আপনি নিশ্চিত না হন যে ব্যবস্থাটি এটি হয় is"
14:43 এ রেডিওস্পিল

8
চারপাশে মোড়ানো এছাড়াও বোঝায় যে আপনি প্রয়োজনীয়ভাবে কেবল তাদের ওআইডি ভিত্তিতে দুটি সারি পুরানো মুছতে পারবেন না, কারণ নিম্ন ওআইডি সহ একটি র‌্যাপের চারপাশে থাকতে পারে।
কার্ল জি

উপরের মতামত অনুসারে ওআইডিগুলি বিশ্বব্যাপী অনন্য নয়, ২০১১ সালেও যখন এই উত্তরটি লেখা হয়েছিল। এছাড়াও সিস্টেম আইটেমগুলির জন্য ওআইডি দরকার, সুতরাং সারি কাউন্টারগুলিতে সমস্ত ওআইডি ব্যবহার করা নতুন টেবিলগুলিতে ওআইডি নির্ধারণের সাথে ডাটাবেসটিকে সহায়তা করে না (টেবিলের জন্য, এটির সারি নয়)। এছাড়াও, বিবেচনা করুন যে কোনও ডেঙ্গু 4-বাইট পূর্ণসংখ্যার কাউন্টার আপনার ডেটাবেসের প্রতিটি টেবিলের জন্য সত্যই যথেষ্ট হতে চলেছে।
ফিজি শেফ

এটি উল্লেখ করার মতো, টেবিল তৈরি করার সময় পিএইচপিপিজিএডমিনের বেশিরভাগ প্রয়োগে, বিকল্পটি ডিফল্ট হিসাবে অক্ষম হিসাবে চেক করা হয়, অর্থাত্ এই বিকল্পটি অবমাননিত।
vdegenne

3
আপনি যদি না জানেন কী কী ওআইডি ব্যবহার করা হয় তবে আপনি সম্ভবত সেগুলি ব্যবহার করতে চান না।
vdegenne

16

ওআইডিগুলি এখনও বড় অবজেক্টস সহ পোস্টগ্রিসের জন্য ব্যবহারে রয়েছে (যদিও কিছু লোক মনে করেন বড় আকারের বস্তু সাধারণত যেভাবে কার্যকর হয় না)। এগুলি সিস্টেম টেবিলগুলি দ্বারা ব্যাপকভাবে ব্যবহৃত হয় । তারা দ্বারা উদাহরণস্বরূপ ব্যবহার করা হয় টোস্ট যা সঞ্চয় 8KB BYTEA এর (ইত্যাদি) চেয়ে বড় একটি পৃথক স্টোরেজ এলাকা (স্বচ্ছভাবে) যার দ্বারা ডিফল্টরূপে ব্যবহৃত হয় বন্ধ সব টেবিল । "সাধারণ" ব্যবহারকারীর টেবিলগুলির সাথে যুক্ত তাদের সরাসরি ব্যবহার মূলত অবমূল্যায়ন করা হয়েছে

ওয়েড টাইপটি বর্তমানে স্বাক্ষরবিহীন চার-বাইট পূর্ণসংখ্যার হিসাবে প্রয়োগ করা হয়। অতএব, বৃহত ডাটাবেসগুলিতে বা এমনকি বড় স্বতন্ত্র টেবিলগুলিতে ডাটাবেস-বিস্তৃত স্বতন্ত্রতা সরবরাহ করার পক্ষে এটি যথেষ্ট পরিমাণে বড় নয়। সুতরাং, কোনও ব্যবহারকারী-তৈরি টেবিলের ওআইডি কলামটি প্রাথমিক কী হিসাবে নিরস্ত করা হয়েছে। ওআইডিগুলি কেবলমাত্র সিস্টেম টেবিলের রেফারেন্সের জন্য সবচেয়ে ভাল ব্যবহৃত হয়।

দৃশ্যত OID সিকোয়েন্সটি 4 বি 6 ছাড়িয়ে গেলে "মোড়ানো" করে দেয় । সুতরাং সংক্ষেপে এটি একটি গ্লোবাল কাউন্টার যা মোড়ানো করতে পারে। যদি এটি মোড়ানো থাকে তবে কিছুটা ধীরগতি দেখা দিতে শুরু হতে পারে যখন এটি ব্যবহার করা হয় এবং অনন্য মূল্যবোধ ইত্যাদির জন্য "অনুসন্ধান করা" ইত্যাদি start

Https://wiki.postgresql.org/wiki/ FAQ# What_is_an_OID.3F এও দেখুন


9

পর্যায়ক্রমে ওআইডি আউট হচ্ছে

পোস্টগ্রিসের জন্য দায়ী মূল দলটি ধীরে ধীরে ওআইডিগুলিকে ফেজ করছে।

পোস্টগ্রিজ 12 ওআইডি কলামগুলির বিশেষ আচরণ সরিয়ে দেয়

আপনার টেবিলগুলিতে IDচ্ছিক সিস্টেম কলাম হিসাবে ওআইডি ব্যবহার এখন পোস্টগ্র্রেস 12 থেকে সরানো হয়েছে আপনি আর ব্যবহার করতে পারবেন না:

  • CREATE TABLE … WITH OIDS হুকুম
  • default_with_oids (boolean) সামঞ্জস্যতা সেটিং

ডেটা টাইপ OIDপোস্টগ্র্রেস 12 এ থাকে। আপনি স্পষ্টভাবে টাইপের একটি কলাম তৈরি করতে পারেন OID

পোস্টগ্রিস 12 এ স্থানান্তরিত হওয়ার পরে , কোনও বিকল্প-সংজ্ঞায়িত সিস্টেম কলাম oid ডিফল্টরূপে আর অদৃশ্য হবে না। একটি সম্পাদন করাতে SELECT *এখন এই কলামটি অন্তর্ভুক্ত থাকবে। নোট করুন যে এই অতিরিক্ত "আশ্চর্য" কলামটি নিরবচিত লিখিত এসকিউএল কোডটি ভেঙে দিতে পারে।


5

আপনার ডাটাবেস সারণী থেকে সমস্ত ওআইডি অপসারণ করতে, আপনি এই লিনাক্স স্ক্রিপ্টটি ব্যবহার করতে পারেন:

প্রথমত, পোস্টগ্রিজ এসকিউএল সুপারউজার হিসাবে লগইন করুন:

sudo su postgres

এখন এই স্ক্রিপ্টটি চালান, আপনার ডাটাবেসের নামের সাথে YOUR_DATABASE_NAME পরিবর্তন করুন:

for tbl in `psql -qAt -c "select schemaname || '.' || tablename from pg_tables WHERE schemaname <> 'pg_catalog' AND schemaname <> 'information_schema';" YOUR_DATABASE_NAME` ; do  psql -c "alter table $tbl SET WITHOUT OIDS" YOUR_DATABASE_NAME ; done

আমি এই স্ক্রিপ্টটি আমার সমস্ত ওআইডিগুলি মুছে ফেলার জন্য ব্যবহার করেছি, যেহেতু এনপ্যাগসকিএল 3.0 এটির সাথে কাজ করে না, এবং পোস্টগ্র্রেএসকিউএল এর পরে আর গুরুত্বপূর্ণ নয়।

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