पोस्टग्रेज में एक सरणी में क्वेरी का आउटपुट चुनें


86

मेरा कोड है:

SELECT column_name
FROM information.SCHEMA.columns
WHERE table_name = 'aean'

यह तालिका के कॉलम नाम लौटाता है aean।
अब मैंने एक ऐलान किया है:

DECLARE colnames text[]

मैं कोलनेम सरणी में सेलेक्ट के आउटपुट को कैसे स्टोर कर सकता हूं।
क्या कोलनेम शुरू करने की कोई आवश्यकता है?


+1, मैं ठीक उसी त्रुटि संदेश के साथ यहां पहुंचा- ERROR: डेटा प्रकार की जानकारी के लिए सरणी प्रकार नहीं ढूँढ सका_समेह। Sql_identifier। के साथ कोशिश कर रहा थाarray_agg(column_name, ',')
— 6:00 पर jerrymouse

जवाबों:


150

इसके दो तरीके हैं। एक को पूरा करना है:

SELECT array_agg(column_name::TEXT)
FROM information.schema.columns
WHERE table_name = 'aean'

अन्य एक सरणी निर्माता का उपयोग करना है:

SELECT ARRAY(
SELECT column_name 
FROM information.schema.columns 
WHERE table_name = 'aean')

मुझे लगता है कि यह plpgsql के लिए है। उस स्थिति में आप इसे इस तरह असाइन कर सकते हैं:

colnames := ARRAY(
SELECT column_name
FROM information.schema.columns
WHERE table_name='aean'
);

क्या आप मुझे वह कोड दे सकते हैं जो पोस्टग्रेज पर काम करता है क्योंकि यह पोस्टग्रैस पर काम नहीं कर रहा है ERROR: डेटा प्रकार की जानकारी के लिए सरणी प्रकार नहीं ढूँढ सका
— info_schema.sql_identifier

उसके लिए क्षमा चाहता हूँ। माइंडलेस कॉपी और पेस्टिंग को तीनों कॉल में शामिल array_agg () मिला। मैंने भी आपके पीजी संस्करण को खुश करने के लिए शुरुआती टाइप टाइप किया है।
— डेनिस डी बर्नार्डी

9
Plpgsql भाग पर आगे देखने वाले किसी भी व्यक्ति के लिए आप DECLAREएक सरणी बना सकते हैं my_array INTEGER[];(या जो भी प्रासंगिक प्रकार है)। आप किसी क्वेरी के WHEREक्लॉज़ की तरह सरणी का भी उपयोग कर सकते हैं WHERE values = ANY(my_array)। ANYकिसी सरणी या एक सेट ले जाता है और है कि सरणी / सेट में उपस्थिति के लिए जाँच करेगा, तो यह करने के लिए समतुल्य रूप में कार्य करता है IN ()एक अर्थ में
— user2490003

11

मेरे साथ भी ठीक यही समस्या आई. डेनिस द्वारा दिए गए समाधान का सिर्फ एक और काम करने वाला संशोधन (प्रकार निर्दिष्ट किया जाना चाहिए):

SELECT ARRAY(
SELECT column_name::text
FROM information_schema.columns
WHERE table_name='aean'
)

1
ऐसा प्रतीत नहीं होता।
— सोवियुत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.