9

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

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

3 回答 3

8

您可以使用 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;
于 2010-03-05T09:45:57.547 回答
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;
于 2012-06-21T14:14:22.457 回答
0

使用过程(PostgreSQL 11+)

CREATE OR REPLACE PROCEDURE create_schema( _schema text)
LANGUAGE plpgsql as
$$
  BEGIN
        EXECUTE format( 'CREATE SCHEMA IF NOT EXISTS %I ',_schema); 
  END
$$;

通过以下方式调用此过程:

call create_schema('test');
于 2021-12-10T06:31:17.733 回答