2010-03-05 79 views
7

我想創建一個名稱傳遞給變量的架構。 例子:創建一個名稱傳遞給變量的架構

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

回答

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; 
+0

感謝弗蘭克它爲我工作。 – GVK 2010-03-05 12:25:21

+1

推薦你使用'.. IF NOT EXISTS' – 2016-03-22 17:32:19

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;