创建一个名称由变量传递的模式

时间:2010-03-05 07:13:42

标签: postgresql plpgsql

我想创建一个带有由变量传递的名称的模式。 例如:

CREATE OR REPLACE FUNCTION test1("name" character varying)
  RETURNS void AS
'CREATE SCHEMA "name";'
  LANGUAGE 'sql' VOLATILE
  COST 100;

2 个答案:

答案 0 :(得分:7)

您可以使用plpgsql而不是EXECUTE:

CREATE OR REPLACE FUNCTION test1("name" character varying)
RETURNS void AS
$$
BEGIN
    EXECUTE 'CREATE SCHEMA '|| quote_ident($1); -- security

    RETURN;
END;
$$
LANGUAGE plpgsql
VOLATILE
COST 20;

答案 1 :(得分:2)

用户search_path更改默认架构,以便您可以轻松地向其添加表格! 并使用带有%I的格式将模式名称转义为标识符。

像这样:

CREATE OR REPLACE FUNCTION test1("name" character varying)
RETURNS void AS
$$
BEGIN
    EXECUTE FORMAT('CREATE SCHEMA %I;', $1);
    EXECUTE FORMAT('SET search_path TO %I;', $1);

    CREATE TABLE table1(
    column1 integer
    );

    RETURN;
END;
$$
LANGUAGE plpgsql
VOLATILE
COST 20;