PostgreSQL: function para criar um esquema

15/10/2016

0

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.
Mauricio Leal

Mauricio Leal

Responder

Posts

15/10/2016

Mauricio Leal

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'';
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar