programing

선택한 쿼리의 출력을 하나의 어레이에 포스트그레스로 저장

easyjava 2023. 5. 29. 21:54
반응형

선택한 쿼리의 출력을 하나의 어레이에 포스트그레스로 저장

내 코드는:

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

반응형