Создайте схему с именем, переданным переменной - PullRequest
9 голосов
/ 05 марта 2010

Я хочу создать схему с именем, переданным переменной. Пример:

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

Ответы [ 2 ]

8 голосов
/ 05 марта 2010

Вы можете использовать plpgsql, а затем ВЫПОЛНИТЬ:

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;
2 голосов
/ 21 июня 2012

user 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;
...