我在循环中创建了一堆模式。我有这样的事情:
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;
但是,这不起作用;它尝试使用文字名称' testschema'而不是test0,test1 ... test' n'来创建一个模式。那么,我如何在这种查询中使用变量呢?
答案 0 :(得分: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;
答案 1 :(得分:0)
您应该使用execute
命令。
您可以指定CREATE SCHEMA testschema
;
execute 'CREATE SCHEMA '|| schema_name