2010-03-05 6 views
7

द्वारा पारित नाम के साथ एक स्कीमा बनाएं मैं चर द्वारा पारित नाम के साथ एक स्कीमा बनाना चाहता हूं। उदाहरण:परिवर्तनीय

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

उत्तर

7

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

धन्यवाद फ्रैंक यह मेरे लिए काम किया। – GVK

+1

अनुशंसा करते हैं कि आप 'id not EXISTS' का उपयोग कर फ़ंक्शन idempotent बनाते हैं –

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;