कास्ट तीन प्रकार की होती है। आपके स्रोत के लिए एक लक्षित प्रकार के लिए पंजीकृत कास्ट "असाइनमेंट" (a
.) होना चाहिए ) या "निहित" (i
) VALUES
. में काम करने के लिए एक INSERT
. की अभिव्यक्ति बयान। सिस्टम कैटलॉग pg_cast
देख रहे हैं
, boolean
. से कास्ट से integer
केवल परिभाषित किया गया है "स्पष्ट" (e
) :
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM pg_cast
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
परिणाम:
castsource casttarget castfunc castcontext
boolean integer pg_catalog.int4 e
संबंधित:
आपको बदलना होगा castcontext
इसे काम करने के लिए - जिसे आप कर सकते हैं सुपरसुसर के रूप में करें। इस आकर्षक पैंतरेबाज़ी के लिए कोई "ALTER CAST" कथन नहीं है, आपको UPDATE
करना होगा सीधे। पसंद:
UPDATE pg_cast
SET castcontext = 'a'
WHERE castsource = 'bool'::regtype
AND casttarget = 'int'::regtype;
हालांकि , प्रत्येक कास्ट के पूर्वनिर्धारित कास्ट संदर्भ के अच्छे कारण हैं। सिस्टम कैटलॉग के साथ छेड़छाड़ कुछ ऐसा नहीं है जिसे आपको हल्के में करना चाहिए। इस विशेष मामले में यह निर्णय लेने में असंतुलन पैदा कर सकता है जब पोस्टग्रेज को एक मिलान करने वाली कास्ट चुनना होता है। जैसे अतिभारित कार्यों के एक सेट से चुनने के लिए ...
integer -> boolean
. के लिए समान प्रक्रिया , int2 -> boolean
, boolean -> int2
, आदि.