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


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.