2010-03-05 10 views

risposta

7

Si potrebbe utilizzare plpgsql e di EXECUTE: search_path

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

Grazie Frank ha funzionato per me. – GVK

+1

Consiglia di rendere idempotente la funzione usando '.. SE NON ESISTE ' –

2

all'utente di modificare lo schema predefinito così si può facilmente aggiungere tabelle ad essa! e utilizzare il formato con% I per sfuggire al nome dello schema come identificativo.

come questo:

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;