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
इस मामले में मैंने तालिका के सभी स्तंभों के लिए डेटा प्रकार लौटा दिया है।