선택한 쿼리의 출력을 하나의 어레이에 포스트그레스로 저장
내 코드는:
SELECT column_name
FROM information.SCHEMA.columns
WHERE table_name = 'aean'
테이블의 열 이름을 반환합니다.aean.
이제 배열을 선언했습니다.
DECLARE colnames text[]
select의 출력을 colnames 배열에 저장하려면 어떻게 해야 합니까?
열 이름을 초기화할 필요가 있습니까?
두 가지 방법이 있습니다.하나는 다음을 집계하는 것입니다.
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'
)
제 생각에는 이것이 ppgsql을 위한 것 같습니다.이 경우 다음과 같이 할당할 수 있습니다.
colnames := ARRAY(
SELECT column_name
FROM information_schema.columns
WHERE table_name='aean'
);
저도 똑같은 문제를 겪었습니다.Denis가 제공한 솔루션의 작업 수정 사항을 한 번만 더 수행합니다(유형을 지정해야 함).
SELECT ARRAY(
SELECT column_name::text
FROM information_schema.columns
WHERE table_name='aean'
)
정기:
SELECT post_id FROM posts WHERE(poster_name='John');
output: [
{'post_id': 1},
{'post_id': 2},
{'post_id': 3},
]
사용.ARRAY_AGG:
SELECT ARRAY_AGG(post_id) FROM posts WHERE(poster_name='John');
output: [
{[1, 2, 3]}
]
데이터 유형 "TEXT"에 캐스팅하면 쿼리가 문제 없이 실행됩니다.plpgsql에서는 배열 변수를 할당할 때 유형 캐스팅을 사용할 필요가 없습니다.제 요구 사항은 특정 테이블의 모든 열 이름에 대한 CSV를 얻는 것이었습니다.저는 다음 코드를 plpgsql에 사용했습니다.
Declare col_list varchar[]:=NULL;
cols varchar:=NULL;
Begin
col_list := ARRAY(select t.name from frm_columns t where t.tname='emp_mstr');
cols := array_to_string(col_list,',');
return cols;
End;
CREATE OR REPLACE FUNCTION f_test_array(in _colname text)
returns text as $body$
DECLARE colnames text[];
begin
colnames := ARRAY(
SELECT column_name FROM information_schema.columns WHERE table_name='customer'
);
if exists(select _colname = any(colnames))
then return format('%s it exits.', _colname);
else return format('%s not exits.', _colname);
end if;
end
$body$
LANGUAGE plpgsql;
열이 존재하는지 여부를 확인합니다.요점:if exists(select _colname = any(colnames))사용할 수도 있습니다.string_agg string_agg 사용량:
CREATE OR REPLACE FUNCTION f_test_array1(in _colname text)
returns text as $body$
DECLARE colnames text;
begin
colnames := (SELECT string_agg(column_name,',') FROM information_schema.columns WHERE table_name='customer')::text;
if exists(select colnames ilike '%' || quote_literal(_colname) ||'%')
then return format('column %s exits.', _colname);
else return format('column %s does not exits.', _colname);
end if;
end
$body$
LANGUAGE plpgsql;
함수에서 colnames text[] 배열을 선언한 다음 시작 부분에 다음 쿼리를 씁니다.
정보에서 열n_name을 열 이름으로 선택합니다.SCHEMA.columns table_name = 'aean' 위치
언급URL : https://stackoverflow.com/questions/6402043/store-select-querys-output-in-one-array-in-postgres
'programing' 카테고리의 다른 글
| Android용 Eclipse에서 ProGuard 사용 (0) | 2023.05.29 |
|---|---|
| Nodejs의 Mongodb vs Postgres (0) | 2023.05.29 |
| PostgreSQL에서 세션 ID에 적합한 임의 문자열을 어떻게 생성합니까? (0) | 2023.05.29 |
| PostgreSQL에서 열 기본값을 변경하려면 어떻게 해야 합니까? (0) | 2023.05.29 |
| Bash에서 문자열이 어떤 값으로 시작하는지 확인하려면 어떻게 해야 합니까? (0) | 2023.05.29 |