2016-10-19 6 views
0

populate.sql 스크립트에 작성 테이블이 있습니다.다른 스키마에서 동일한 스크립트 실행 - 포스트그레스

CREATE TABLE "EXAMPLE" (
................. 
.............. 
); 
CREATE TABLE "BlaBla" (
.......... 
........ 
); 
CREATE TABLE ... 

이 스크립트는 20 개가 넘는 테이블을 만듭니다. 다른 스키마 위에 이걸 populate.sql 실행하고 싶습니다. schema1, schema2schema3에이 스크립트를 실행한다고 가정 해 보겠습니다.

그럼 작성할 수 있습니다.

CREATE SCHEMA IF NOT EXISTS "schema1"; 
SET SCHEMA 'schema1'; 
populate.sql

스키마에 해당 테이블을 만들 수 있습니다.

하나의 psql 명령 내에서 모든 스키마에 이러한 테이블을 만들려면 어떻게해야합니까?

필자는 psql에서 LOOP을하고 스키마를 먼저 만들고 그 스키마 위에 테이블을 만들어야한다고 느낀다.

답변

1

테이블은 현재 설정되어있는 search_path으로 생성됩니다 (create 문에서 달리 지정되지 않은 경우).

루프를 사용할 수 있습니다. 이 루프에서 스키마에 대한 검색 경로를 설정해야합니다. 코멘트에 a_horse_with_no_name에서 언급 한 바와 같이

DO 
$$ 
    DECLARE schemaname text; 
BEGIN 
    FOR i IN 1..3 LOOP 

    schemaname := 'schema' || i::text; 

    execute 'CREATE SCHEMA ' || schemaname; 
    execute 'SET SCHEMA ' || schemaname;  
    execute 'SET search_path TO ' || schemaname; 

    -- conent of populate.sql 

    END LOOP; 
END 
$$; 

do block 내부 외부 스크립트를 호출 할 수 없습니다. 따라서이 대답은 populate.sql 파일을 확장하고이 파일을 do block으로 묶는 경우에만 관련이 있습니다.

+0

'do' 블록 내부에서 SQL 스크립트를 포함 할 수 없습니다. –

+0

@a_horse_with_no_name 감사합니다. 내 대답을 편집했습니다. – ChrisB

관련 문제