PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

कैसे pg_typeof () PostgreSQL में काम करता है

PostgreSQL में, pg_typeof() फ़ंक्शन आपको किसी भी मान का डेटा प्रकार प्राप्त करने की अनुमति देता है।

अधिक विशेष रूप से, यह उस मान के डेटा प्रकार का OID देता है जो इसे पास किया जाता है। यह एक regtype देता है , जो एक OID उपनाम प्रकार है। इसलिए यह तुलना उद्देश्यों के लिए एक OID के समान है लेकिन एक प्रकार के नाम के रूप में प्रदर्शित होता है।

सिंटैक्स

फ़ंक्शन में निम्न सिंटैक्स है:

pg_typeof(any)

जहां any कोई मूल्य है।

उदाहरण

प्रदर्शित करने के लिए यहां एक बुनियादी उदाहरण दिया गया है।

SELECT pg_typeof(100);

परिणाम:

integer

मनमानी स्ट्रिंग्स

Postgres में, एक से अधिक प्रकार के स्ट्रिंग होते हैं (उदा. char , varchar , text ) इसलिए, आप किसी तर्क को केवल एकल उद्धरणों में घेरकर नहीं रख सकते हैं और उससे यह जानने की अपेक्षा कर सकते हैं कि उसका डेटा प्रकार क्या है।

SELECT pg_typeof('Elephant'); 

परिणाम:

unknown

इसलिए आपको इसका वास्तविक डेटा प्रकार निर्दिष्ट करना होगा।

SELECT pg_typeof('Elephant'::varchar); 

परिणाम:

character varying

Postgres में, character varying varchar . का नाम है (वास्तव में, varchar character varying . के लिए उपनाम है )।

यह अंतिम उदाहरण थोड़ा अनावश्यक था, जैसा कि मैंने स्पष्ट रूप से चर प्रकार कहा था, जिसका अर्थ था कि मुझे पहले से ही पता था कि परिणाम क्या होने वाला था।

वास्तविक दुनिया में, यह अधिक संभावना है कि आप एक चर के डेटा प्रकार को प्राप्त करने का प्रयास कर रहे होंगे।

वैरिएबल का रिटर्न प्रकार

इस उदाहरण में, मैंने पिछली स्ट्रिंग को एक वेरिएबल में रखा, फिर उसका डेटा प्रकार प्राप्त किया।

DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
 raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$

परिणाम:

NOTICE: Value: Elephant
Type: character varying

यहां यह फिर से है, सिवाय इसके कि मैं डेटा प्रकार को एक अलग स्ट्रिंग प्रकार में बदलता हूं (char(8) )।

DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
 raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$

परिणाम:

NOTICE: Value: Elephant
Type: character

बूलियन मान

बूलियन मान को स्पष्ट रूप से प्रदान करने का एक उदाहरण यहां दिया गया है।

SELECT 
  pg_typeof(true),
  pg_typeof(false); 

परिणाम:

 pg_typeof | pg_typeof
-----------+-----------
   boolean | boolean

फ़ंक्शन का रिटर्न प्रकार

फिर, इसकी संभावना नहीं है कि आप स्पष्ट रूप से true प्रदान करेंगे या false इस समारोह के लिए। इसकी अधिक संभावना है कि यह एक चर से आएगा।

लेकिन आप pg_typeof() . का भी इस्तेमाल कर सकते हैं किसी फ़ंक्शन के रिटर्न प्रकार का पता लगाने के लिए।

यहाँ एक उदाहरण है।

SELECT pg_typeof(isfinite(date '2020-07-18'));

परिणाम:

boolean

इस मामले में मैंने isfinite() . पास किया है pg_typeof() . पर कार्य करें इसके तर्क के रूप में कार्य करें।

और यहाँ एक और उदाहरण है। इसमें मुझे make_date() . के रिटर्न वैल्यू का डेटा टाइप मिलता है समारोह।

SELECT pg_typeof(make_date('1999', '09', '19')); 

परिणाम:

date

एक कॉलम का डेटा प्रकार

डेटाबेस कॉलम के डेटा प्रकार को वापस करने का एक उदाहरण यहां दिया गया है।

SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;

परिणाम:

timestamp without time zone

इस मामले में मैंने actor.last_update . के डेटा प्रकार की जांच की pagila . में कॉलम नमूना डेटाबेस।

आइए एक और कॉलम देखें:

SELECT pg_typeof(name)
FROM language
LIMIT 1;

परिणाम:

character

यह कॉलम bpchar . के रूप में प्रदर्शित होता है मेरे इंटरफ़ेस में, जो स्पष्ट रूप से CHAR(n) . के लिए आंतरिक प्रकार का नाम है ।

वैसे, आप information_schema.columns . को क्वेरी कर सकते हैं कॉलम के डेटा प्रकार के लिए।

इसलिए, हम इसके बजाय निम्नलिखित क्वेरी का उपयोग कर सकते हैं:

SELECT 
  column_name, 
  data_type 
FROM information_schema.columns
WHERE table_name = 'language';

परिणाम:

 column_name |          data_type          
-------------+-----------------------------
 language_id | integer
 name        | character
 last_update | timestamp without time zone

इस मामले में मैंने तालिका के सभी स्तंभों के लिए डेटा प्रकार लौटा दिया है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. प्लेसहोल्डर के रूप में प्रश्न चिह्न की व्याख्या करने से पीडीओ को कैसे रोकें?

  2. माउंटेन लायन पर पीजी रत्न '0.14.0' विफल रहता है

  3. Ubuntu 18.04 पर PostgreSQL स्थापित करें

  4. एक विदेशी कुंजी के रूप में एक कॉलम जोड़ने से विदेशी कुंजी बाधा में संदर्भित त्रुटि कॉलम मौजूद नहीं है

  5. PSQLException:वर्तमान लेनदेन निरस्त कर दिया गया है, लेनदेन ब्लॉक के अंत तक आदेशों को अनदेखा कर दिया गया है