2012-08-22 2 views
1

postgresql 데이터베이스 목록을 순환하여 postgresql 함수 내에서 쿼리를 실행하고 싶습니다. 여기 postgresql 함수에서 데이터베이스 루핑하기

CREATE OR REPLACE FUNCTION my_function() 
    RETURNS VOID AS 
    $$ 
    DECLARE 
     db VARCHAR(50); -- this declaration is where the confusion is 
    BEGIN 
     FOR db IN 
      SELECT datname FROM pg_catalog.pg_database WHERE datname ~ '^mydbname_' 
     LOOP 
      -- this is just an example 
      SELECT * FROM db; 
     END LOOP; 
    END; 
    $$ 
    LANGUAGE 'plpgsql'; 

은 내가 문자열 (예를 들어, EXECUTE 'SELECT * FROM ' || db || ';';)로 쿼리를 평가하기 위해 PostgreSQL을의 EXECUTE를 사용할 수 있음을 알고 있어요 ... 코드 예제,하지만 내 쿼리는 다소 길고 복잡하다.

postgresql에서이를 수행 할 수있는 방법이 있습니까? "데이터베이스"선언 유형이 있습니까?

답변

2

을보십시오. EXECUTE를 사용해야합니다.

데이터베이스 간 쿼리를 수행 할 수 없어 어쨌든 작동하지 않습니다. 클라이언트에서이 작업을 수행하거나 dblink를 사용하십시오. SQL/MED (Foreign Data Wrappers)의 구현이 있지만 이상한 점은 PostgreSQL wrapper yet이 없다고 생각합니다.

+0

당신이 맞습니다 - 제가하려는 것은 근본적으로 잘못되었습니다. 이걸 bash 스크립트로 이식해야 할 것 같습니다. 감사! – jonas

1

유형 이름이 pg_database에 db 이름이 아닌가요?

당신은 직접 쿼리에서 객체 이름으로 변수 (데이터베이스, 테이블, 열)를 사용할 수 없습니다 DECLARE db_name NAME;

+0

정말 고맙습니다. 'datname' 컬럼은'NAME' 타입입니다. – jonas