2013-06-04 3 views
1

매우 큰 테이블의 행 집합에 대해 매우 복잡한 조작을해야합니다.postgresql은 결과를 어디서 보내고 결과를 함수로 보냅니 까?

그것은 조작 것 같아 (A 가입, UNION & 여러 주문 총격 사건을 기반으로 널 (null) 속성 "백필") 최고의 기능으로 수행됩니다. 행의 수를 최소화하려면 처음에는 WHERE 절이 필요합니다.

그리고 이것 모두가 Rails와 대화하기 때문에 외부 레이어는 VIEW 여야합니다.

마이너스 내가 무슨 백필 그러나 둘 이상의 행으로이 반환되는 경우

CREATE OR REPLACE VIEW testing.for_sale_layouts_view 
AS SELECT * from bestforsalelayout((select address_id from public.for_sale_layouts limit 1)); 
; 

과 작품의 이런 종류의

select * from testing.for_sale_layouts_view where address_id = <addr_id>; 

처럼 호출

CREATE OR REPLACE FUNCTION bestforsalelayout(addr_id int) 
RETURNS public.for_sale_layouts 
AS $$ 
    select * from public.for_sale_layouts where address_id = addr_id; 
$$ 
LANGUAGE SQL IMMUTABLE; 

입니다 for_sale_layouts 함수는 아무 것도 반환하지 않으며, 싱글 톤 행은 잘 동작합니다.

저는 실종되었으므로 작업 방향의 포인터를 크게 높이 평가할 것입니다.

답변

1

두 개 이상의 행을 반환하려면 return table 함수 형식이 필요합니다.

here 문서를 확인하십시오.

CREATE OR REPLACE FUNCTION bestforsalelayout(addr_id int) 
RETURNS table(for_sale_layouts int) 
AS $$ 
    select for_sale_layouts from public.for_sale_layouts where address_id = addr_id; 
$$ 
+0

이 함수는 한 행만 반환합니다. 문제는보기의 subselect에 하나 이상의 행이 포함되어있는 경우, 해당 함수에 전달할 address_id를 가져 오는 것입니다. –

관련 문제