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




व्हाट इस सकल (3)

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

मेरे अनुभव में, सुविधा आमतौर पर अधिकांश पोस्टग्रेज़ समर्थित अनुप्रयोगों में उपयोग नहीं की जाती है (संभवत: क्योंकि वे गैर-मानक हैं), और उनका उपयोग अनिवार्य रूप से बहिष्कृत किया गया है :

PostgreSQL 8.1 में डिफ़ॉल्ट_with_oids डिफ़ॉल्ट रूप से बंद है; PostgreSQL के पूर्व संस्करणों में, यह डिफ़ॉल्ट रूप से चालू था।

उपयोगकर्ता तालिकाओं में ओआईडी का उपयोग बहिष्कृत माना जाता है, इसलिए अधिकांश स्थापनाओं को इस चर अक्षम को छोड़ देना चाहिए। किसी विशेष तालिका के लिए ओआईडी की आवश्यकता वाले अनुप्रयोगों को तालिका बनाते समय ओआईडीएस के साथ निर्दिष्ट करना चाहिए। इस चर को पुराने अनुप्रयोगों के साथ संगतता के लिए सक्षम किया जा सकता है जो इस व्यवहार का पालन नहीं करते हैं।

मैं कुछ 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