선택 쿼리의 출력을 postgres의 하나의 어레이에 저장


88

내 코드는 다음과 같습니다.

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

테이블의 열 이름을 반환합니다 aean.
이제 배열을 선언했습니다.

DECLARE colnames text[]

선택의 출력을 colnames 배열에 어떻게 저장할 수 있습니까?
colnames를 초기화 할 필요가 있습니까?


+1, 정확히 동일한 오류 메시지로 여기에 도달했습니다. ERROR : information_schema.sql_identifier 데이터 유형에 대한 배열 유형을 찾을 수 없습니다. 함께 노력했다array_agg(column_name, ',')
jerrymouse

답변:


151

두 가지 방법이 있습니다. 하나는 집계하는 것입니다.

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'
);

당신이 나에게이 때문에 포스트 그레스에 작품 포스트 그레스 오류에 작동하지 않는 코드를 제공 할 수 있습니다 : 데이터 유형 information_schema.sql_identifier에 대한 배열 유형을 찾을 수 없습니다
mitesh

죄송합니다. 무의미한 복사 및 붙여 넣기는 세 가지 호출 모두에 array_agg ()를 포함했습니다. 나는 또한 PG 버전을 행복하게 만들기 위해 초기 버전을 타이프 캐스팅했습니다.
Denis de Bernardy 2011 년

9
plpgsql 부분을 더 자세히 살펴보면 DECLARE배열을 my_array INTEGER[];(또는 관련 유형이 무엇이든) 할 수 있습니다 . WHERE와 같은 쿼리 절 에서 배열을 사용할 수도 있습니다 WHERE values = ANY(my_array). 은 ANY이 등가 적으로 기능하므로, 어레이 또는 세트를 취득하는 어레이 / 세트의 존재를 확인한다 IN ()의미로
user2490003

11

나는 똑같은 문제가 있었다. Denis가 제공 한 솔루션의 작업 수정 사항이 하나 더 있습니다 (유형을 지정해야 함).

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

1
더 이상 그렇지 않은 것 같습니다.
Soviut
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.