sql - समझ - व्हाट इस सकल




एसक्यूएल, पोस्टग्रेस ओआईडी, वे क्या हैं और वे उपयोगी क्यों हैं? (2)

मैं कुछ PostgreSQL टेबल निर्माण को देख रहा हूं और मैंने इस पर ठोकर खाई:

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

मैंने पोस्टग्रेज़ द्वारा प्रदान किए गए दस्तावेज को पढ़ा और मुझे ओओपी से ऑब्जेक्ट आइडेंटिफायर की अवधारणा पता है लेकिन फिर भी मुझे समझ में नहीं आता है,

  • डेटाबेस में ऐसे पहचानकर्ता उपयोगी क्यों होंगे?
  • प्रश्न कम करने के लिए?
  • इसका इस्तेमाल कब किया जाना चाहिए?

अपने डेटाबेस टेबल से सभी ओआईडी को हटाने के लिए, आप इस लिनक्स स्क्रिप्ट का उपयोग कर सकते हैं:

सबसे पहले, PostgreSQL सुपरसुर के रूप में लॉगिन करें:

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

मैंने अपने सभी ओआईडी को हटाने के लिए इस स्क्रिप्ट का उपयोग किया, क्योंकि Npgsql 3.0 इसके साथ काम नहीं करता है, और यह PostgreSQL के लिए अब महत्वपूर्ण नहीं है।


ओआईडी अभी भी बड़ी objects with पोस्टग्रेस के लिए उपयोग में हैं (हालांकि कुछ लोग तर्क देंगे कि बड़ी वस्तुएं आम तौर पर उपयोगी नहीं होती हैं)। इन्हें सिस्टम टेबल द्वारा बड़े पैमाने पर भी उपयोग किया जाता है । उदाहरण के लिए उनका उपयोग TOAST द्वारा किया जाता है जो 8KB BYTEA (आदि) से अधिक एक अलग भंडारण क्षेत्र (पारदर्शी रूप से) तक स्टोर करता है जिसका उपयोग डिफ़ॉल्ट रूप से सभी तालिकाओं द्वारा किया जाता है। "सामान्य" उपयोगकर्ता तालिकाओं से जुड़े उनके प्रत्यक्ष उपयोग को मूल रूप से deprecated

ओड प्रकार वर्तमान में एक हस्ताक्षरित चार-बाइट पूर्णांक के रूप में लागू किया गया है। इसलिए, यह बड़े डेटाबेस में, या यहां तक ​​कि बड़ी व्यक्तिगत तालिकाओं में डेटाबेस-व्यापी विशिष्टता प्रदान करने के लिए पर्याप्त नहीं है। इसलिए, प्राथमिक कुंजी के रूप में उपयोगकर्ता द्वारा निर्मित तालिका के ओआईडी कॉलम का उपयोग करके निराश किया जाता है। ओआईडी का उपयोग केवल सिस्टम टेबल के संदर्भों के लिए किया जाता है।

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

https://wiki.postgresql.org/wiki/FAQ#What_is_an_OID.3F भी https://wiki.postgresql.org/wiki/FAQ#What_is_an_OID.3F





postgresql