2015-01-29 4 views
0

루프에 여러 스키마가 생성됩니다. 나는 다음과 같은 것을 가지고있다 :PostgreSQL : 쿼리에서 변수 사용

FOR i in 0 .. num_schemas LOOP 
    schema_name := 'test' || i; 
    CREATE SCHEMA testschema; 
    CREATE TABLE testschema.testtable (
     test_id UUID PRIMARY KEY, 
     test_address VARCHAR 
    ); 

END LOOP; 

그러나 이것은 작동하지 않는다. test0, test1 ... test'n '대신'testschema '라는 리터럴 이름으로 스키마를 작성하려고 시도합니다. 그렇다면 어떻게 이런 종류의 쿼리에서 변수를 사용할 수 있습니까?

답변

3

동적 SQL이 필요합니다. 그러나 각 테이블의 접두사 대신에 현재 스키마를 생성 한 후에이를 바꿀 것입니다. 이렇게하면 모든 테이블에 접두어를 붙일 필요가 없습니다.

FOR i in 0 .. num_schemas LOOP 
    schema_name := 'test' || i; 
    execute 'CREATE SCHEMA '||schema_name; 
    execute 'set search_path = '||schema_name; 
    CREATE TABLE testtable (-- this will be created in the just created schema 
     test_id UUID PRIMARY KEY, 
     test_address VARCHAR 
    ); 
END LOOP; 
+0

고맙습니다. –

0

execute 명령을 사용해야합니다. CREATE SCHEMA testschema 대신 을 지정하면 execute 'CREATE SCHEMA '|| schema_name을 지정할 수 있습니다.

관련 문제