을 가지고있다, 나는 당신의 최선의 선택은 단 한 가지가 실행됩니다 보장 where 절과 함께 UNION
을 실제로 생각합니다. 동일하게 구조화 된 하위 집합을 가져와야합니다 (데이터 유형 측면에서는 캐스트하고 이름은 NULL
). 플래너는 꽤 영리하며 계획의 관련 부분 만 실행합니다. 예를 들어이 고려 : 이제
CREATE OR REPLACE FUNCTION journals()
RETURNS setof .... LANGUAGE SQL AS $$;
SELECT jl.*, j.reference, j.description, j.counterparty
FROM journal_line jl
JOIN journals js ON jl.entry_id = js.id
JOIN (select id, reference, description, null::text as counterparty,
'general' as type
FROM general_journal
UNION
select id, invnumber, description, counterparty, 'sales'
FROM sales_journal) j ON (j.type, j.id) = (js.type, js.id);
$$;
9.3에서 당신이 측면 여기서 약간의 마일리지를 얻을 수 있습니다 :
CREATE OR REPLACE FUNCTION journals()
RETURNS setof .... LANGUAGE SQL AS $$;
SELECT jl.*, j.reference, j.description, j.counterparty
FROM journal_line jl
JOIN journals js ON jl.entry_id = js.id
JOIN (select id, reference, description, null::text as counterparty
FROM general_journal
WHERE js.type = 'general'
UNION
select id, invnumber, description, counterparty
FROM sales_journal
WHERE js.type = 'sales') j ON j.id = js.id
$$;
를 문제가 해결되지 않으면, EXECUTE ... USING
를 사용하는 플래너는 일반적으로 스마트 적절한 색인 생성을 가정 할 때이를 적절하게 최적화 할만큼 충분합니다.
동적 쿼리를 작성하려고합니까? 어떤 경우에는 plpgsql의 EXECUTE (http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN)를보고 싶습니다. –
다음과 같은 행을 반환하고 싶습니다. 특별하지 않아. 의미, 열 유형 또는 이름을 미리 정의하고 싶지 않습니다. 1 spesific 테이블 집합을 반환하고 싶습니다 및 foo_table 및 모든 row_id에서 그 테이블 이름을 얻을 것이다. – kasu