2017-09-05 27 views
5

मुझे postgres.org ईमेल में एक अभिव्यक्ति मिली, जो उपयोगी लगता है, लेकिन जिसका दस्तावेज़ मैं नहीं ढूंढ पाया।पोस्टग्रेज़ एसक्यूएल 'कास्ट टुपल' मुहावरे दस्तावेज कहां है?

select t.*::text from t 

यहाँ, ::text डाली स्तंभों में से प्रत्येक को लागू करने के लिए लगता है, और जिसके परिणामस्वरूप आउटपुट के रूप में psql द्वारा प्रदर्शित थोड़ा अजीब है। शायद कोई मेरे जैसे लोगों को शिक्षित कर सकता है और रहस्य को सुलझ सकता है।

संपादित करें: अंत: मजे की बात है, अनुभाग 4.2.9. Type Casts इस वाक्य

संपादित करने के लिए कोई चर्चा नहीं करता! 4.2.13. Row Constructors

उत्तर

4

पर मिले संबंधित दस्तावेज मैं वर्णन कर सकता हूं कि क्या हो रहा है। इस वाक्यविन्यास पर विचार करें:

select (1, 2) 

यह दो कॉलम के साथ एक रिकॉर्ड (या ट्यूपल) देता है। आप या तो cast() या :: का उपयोग कर पाठ को टपल परिवर्तित कर सकते हैं:

select (1, 2)::text 

एक ही बात t.* साथ होता है। यह रूप में व्याख्या की है:

select (t.*)::text 

आप के साथ एक ही परिणाम मिलेगा:

SELECT t::text FROM t 

t.*:

select cast(t.* as text) 
+0

अपने बहुत स्पष्ट प्रतिक्रिया के लिए धन्यवाद।यह पता लगाने में दिलचस्प है कि एसक्यूएल 'tuple' अभिव्यक्तियों को अनुमति देता है: "(ए, बी सी)"। Postgres वास्तव में इस विषय पर महान दस्तावेज है, 8.16.5। प्रश्नों में समग्र प्रकार का उपयोग करना – artejera

2

बस तालिका के नाम (या उपनाम) t सीधे का उपयोग पंक्ति को विघटित करने के लिए प्रयोग किया जाएगा, लेकिन चूंकि आप पूरी पंक्ति को पाठ में डाल देते हैं, तो चरण अनावश्यक शोर है।

cast संभव है क्योंकि सब कुछ पोस्टग्रेज़ में text पर डाला जा सकता है। (इनपुट/आउटपुट के लिए एक टेक्स्ट प्रस्तुति होना आवश्यक है।)

आपको किसी भी तरह से पंक्ति का टेक्स्ट प्रतिनिधित्व मिलता है। अर्थात। उत्पादन मान्य स्ट्रिंग शाब्दिक है, तो आप, पंजीकृत पंक्ति प्रकार पर वापस डाल सकता है जो की तरह:

SELECT '(123,"some text",,"2017-01-03 02:27:27.930164+01")'::t 

t एक मेज के नाम किया जा रहा है या (materialized) वर्तमान search_path में (दृश्य दृश्य या आप करने के लिए है स्कीमा-योग्यता) या कोई अन्य पंजीकृत (पंक्ति) प्रकार।

यह बॉक्स के बाहर तालिका नामों के साथ काम करता है क्योंकि पोस्टग्रेस आपके द्वारा बनाई गई प्रत्येक तालिका के लिए एक पंक्ति प्रकार पंजीकृत करता है।

नोट, न तो t.* नोटेशन और न ही कास्ट बैक अज्ञात रिकॉर्ड (जैसे ROW(1,2) या केवल (1,2) संक्षिप्त के लिए संभव है) के लिए संभव है। सिस्टम कैटलॉग में उनकी संरचना के बारे में कोई जानकारी नहीं है।

संबंधित:

संबंधित मुद्दे