2010-08-23 2 views
0

이전 질문에 대한 대답 (request over several schema)을 수행 한 후 여러 스키마 (각 사용자마다 스키마가 있음)에 대한 테이블을 선택하는 저장 프로 시저를 작성하려고합니다.postgresql 여러 스키마에 대한 쿼리가있는 저장 프로 시저

create or replace public.select_simulations() returns setof simulation as $$ 
declare 
    users pg_user%ROWTYPE; 
    simu simulation%ROWTYPE; 
begin 
    for users in select usename from pg_user where usename <> 'postgres' loop 
     for simu in select id, name from (users.usename).simulation loop    
      return next simu; 
     end loop; 
    end loop; 
end; 
$$ 

하지만이 (users.usename).simulation에 동의하고 오류를 생성 한 괄호없이 (아닌 스키마 서브 필드를 검색하는 것)하지 않습니다 ...

그래서 올바른 구문 것입니다 users.usename이 스키마 이름이라고 알려주십시오.

도움 주셔서 감사합니다.

FOR record_or_row IN EXECUTE text_expression LOOP 
    statements 
END LOOP [ label ]; 

http://www.postgresql.org/docs/8.1/static/plpgsql-control-structures.html#PLPGSQL-RECORDS-ITERATING

뭔가 같은 :

+0

, 아마 그 문제 .. –

+0

버전 8.1은 올해 서비스가 중단 될 예정입니다. 최신 버전으로 업그레이드하는 것이 좋습니다. PostgreSQL은 2005 년 11 월 이후로 훨씬 나아졌습니다.이 오래되고 오래된 버전을 만들기위한 시간의 허리가되었습니다. http://wiki.postgresql.org/wiki/PostgreSQL_Release_Support_Policy –

+0

조언 해 주셔서 감사합니다, 8.4로 업그레이드합니다. –

답변

1

당신은을위한 -에 - 실행 제어 구조를 한 번 봐 걸릴 수 있습니다 내가 PostgreSQL의 8.1 사용

... 

for users in select usename from pg_user where usename <> 'postgres' loop 
    for simu in execute 'select id, name from '||quote_ident(users.usename)||'.simulation' loop 
     return next simu; 
    end loop; 
end loop; 
...