Seçili sorgunun çıktısını postgres'te tek bir dizide saklayın


88

Benim kodum:

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

Tablonun sütun adlarını döndürür aean.
Şimdi bir dizi tanımladım:

DECLARE colnames text[]

Select'in çıktısını colnames dizisinde nasıl saklayabilirim?
Sütun adlarını başlatmaya ihtiyaç var mı?


+1, buraya tam olarak aynı hata mesajıyla ulaştım - HATA: bilgi_schema.sql_identifier veri türü için dizi türü bulamadı. İle çalışıyorduarray_agg(column_name, ',')
jerrymouse

Yanıtlar:


151

İki yol var. Biri bir araya getirmektir:

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

Diğeri, bir dizi yapıcısı kullanmaktır:

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

Bunun plpgsql için olduğunu varsayıyorum. Bu durumda şu şekilde atayabilirsiniz:

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

postgres üzerinde çalışan kodu bana verebilir misin, çünkü bu postgres üzerinde çalışmıyor HATA: veri türü için dizi türü bulunamadı information_schema.sql_identifier
mitesh

Bunun için üzgünüm. Akılsız kopyalama ve yapıştırma, her üç çağrıda da array_agg () işlevini içerir. Ayrıca PG sürümünüzü mutlu etmek için ilkini yazdım.
Denis de Bernardy

9
Plpgsql kısmına daha fazla bakan herkes için DECLAREbir dizi my_array INTEGER[];(veya ilgili tür ne olursa olsun) yapabilirsiniz. Diziyi ayrıca bir sorgunun WHEREcümlesinde de kullanabilirsiniz WHERE values = ANY(my_array). ANYBu için eşdeğer çalışması için, bir dizi veya bir grup alır ve bu dizi / set varlığını kontrol eder IN ()duygusu olarak
user2490003

11

Ben tam olarak aynı problem vardı. Denis tarafından verilen çözümün sadece bir çalışma modifikasyonu (tip belirtilmelidir):

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

1
Artık durum böyle görünmüyor.
Soviut
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.