आप अमूर्तता के स्तर को भ्रमित कर रहे हैं। जैसा कि अन्य उत्तर पहले ही बता चुके हैं, CREATE TYPE
सिस्टम में केवल एक (समग्र/पंक्ति) प्रकार पंजीकृत करता है। जबकि एक ROW
कंस्ट्रक्टर वास्तव में एक पंक्ति देता है।
ROW
. के साथ बनाई गई एक पंक्ति प्रकार कंस्ट्रक्टर कॉलम नामों को संरक्षित नहीं करता है, जो तब स्पष्ट हो जाता है जब आप पंक्ति को JSON में बदलने का प्रयास करते हैं।
इस पर रहते हुए, ROW
बस एक शोर शब्द . है सर्वाधिक समय। दस्तावेज:
डेमो:
SELECT t AS r1, row_to_json(t) AS j1
, ROW(1, 'x', NUMERIC '42.1') AS r2, row_to_json(ROW(1, 'x', NUMERIC '42.1')) AS j2
, (1, 'x', NUMERIC '42.1') AS r3, row_to_json( (1, 'x', NUMERIC '42.1')) AS j3
, (1, 'x', '42.1')::myrowtype AS r4, row_to_json((1, 'x', '42.1')::myrowtype) AS j4
FROM (SELECT 1, 'x', NUMERIC '42.1') t;
r1
और j1
मूल कॉलम नामों को सुरक्षित रखें।r2
और j2
नहीं।r3
और j3
समान हैं; यह प्रदर्शित करने के लिए कि कैसे ROW
बस शोर है।r4
और j4
पंजीकृत प्रकार के कॉलम नाम रखें।
आप पंक्ति (रिकॉर्ड) को एक पंजीकृत पंक्ति प्रकार में डाल सकते हैं यदि संख्या और डेटा प्रकार तत्वों का पंक्ति प्रकार से मेल खाता है - नाम इनपुट फ़ील्ड की उपेक्षा की जाती है।