PostgreSQL: function para criar um esquema
Tenho uma function para criar um Schema e depois criar as tabelas desse esquema, conforme segue:
CREATE OR REPLACE FUNCTION public.criar_esquema(nomeesquema TEXT) RETURNS VOID AS $CriarEsquema$
BEGIN
CREATE SCHEMA nomeesquema;
SET search_path TO nomeesquema,public;
/*Cria tabelas do esquema*/
PERFORM criar_tab1();
PERFORM criar_tab2();
END
$CriarEsquema$ LANGUAGE plpgsql VOLATILE;
COMMENT ON FUNCTION public.criar_esquema(text) IS 'Cria o esquema';
-----------------------------------------------------------------------------------------------------
O problema é que quando chamo a function ela cria sempre o esquema com o nome 'nomeesquema' e não
com o parâmetro passado.
Ex: SELECT criar_esquema('teste');
Ao invés de criar o esquema chamado 'teste', ela cria o esquema chamado nomeesquema.
Como resolver isso?
Grato, aguardo.
CREATE OR REPLACE FUNCTION public.criar_esquema(nomeesquema TEXT) RETURNS VOID AS $CriarEsquema$
BEGIN
CREATE SCHEMA nomeesquema;
SET search_path TO nomeesquema,public;
/*Cria tabelas do esquema*/
PERFORM criar_tab1();
PERFORM criar_tab2();
END
$CriarEsquema$ LANGUAGE plpgsql VOLATILE;
COMMENT ON FUNCTION public.criar_esquema(text) IS 'Cria o esquema';
-----------------------------------------------------------------------------------------------------
O problema é que quando chamo a function ela cria sempre o esquema com o nome 'nomeesquema' e não
com o parâmetro passado.
Ex: SELECT criar_esquema('teste');
Ao invés de criar o esquema chamado 'teste', ela cria o esquema chamado nomeesquema.
Como resolver isso?
Grato, aguardo.
Mauricio Leal
Curtidas 0
Respostas
Mauricio Leal
15/10/2016
Olá, resolvi o problema substituindo o comando conforme abaixo:
CREATE OR REPLACE FUNCTION public.criar_esquema(nomeesquema TEXT) RETURNS VOID AS $CriarEsquema$
DECLARE
cmd Text;
BEGIN
cmd = ''Create Schema '' || nomeesquema;
Execute cmd;
cmd = ''Set search_path To '' || nomeesquema || '',public'';
Execute cmd;
/*Cria tabelas do esquema*/
Perform criar_tab1();
Perform criar_tab2();
END
$CriarEsquema$ Language plpgsql Volatile;
Comment On Function public.criar_esquema(text) Is ''Cria o esquema'';
CREATE OR REPLACE FUNCTION public.criar_esquema(nomeesquema TEXT) RETURNS VOID AS $CriarEsquema$
DECLARE
cmd Text;
BEGIN
cmd = ''Create Schema '' || nomeesquema;
Execute cmd;
cmd = ''Set search_path To '' || nomeesquema || '',public'';
Execute cmd;
/*Cria tabelas do esquema*/
Perform criar_tab1();
Perform criar_tab2();
END
$CriarEsquema$ Language plpgsql Volatile;
Comment On Function public.criar_esquema(text) Is ''Cria o esquema'';
GOSTEI 0