PostgreSQL:在查询中使用变量

时间:2015-01-29 13:47:50

标签: sql 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;

但是,这不起作用;它尝试使用文字名称' testschema'而不是test0,test1 ... test' n'来创建一个模式。那么,我如何在这种查询中使用变量呢?

2 个答案:

答案 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