쿼리의 테이블 이름을 다른 테이블에 저장된 값으로 바꾸는 방법이 있습니까? 이것은 postgres SQL에 있습니다.
예
Meta_table
col1 | col 2
Table 1 | val1
Table 2 | val2
내 요구 사항
select *
from (select col1 from meta_table where col2 = val2)
아마도 가장 유연하고 효율적인 방법은 temporary view
using 함수를 동적으로 만드는 것입니다 .
create or replace function f_prepare(tname text, vname text) returns text language plpgsql as $$
begin
execute format(
'create or replace temporary view %I as select * from %I',
vname, tname);
return vname;
end $$;
그런 다음 생성 된 뷰를 일반적인 방법으로 사용할 수 있습니다.
select f_prepare('pg_class', 'v_class');
select * from v_class where relname = 'pg_database'; -- Index on the source table will be used here
코드 사용 :
select f_prepare((select col1 from meta_table where col2 = 'val2'), 'v');
select * from v;
그리고 다른 임시 개체와 마찬가지로 생성 된 뷰는 다른 세션과 충돌하지 않으며 연결 해제시 삭제됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다