Crear Tabla con función en Postgres 8.4 y 9.x

Al realizar una funcion que cree autoamticamente una tabla con parametros, me econtre con un error que decia  ERROR:  syntax error at or near “NOT”
LINE 1: CREATE TABLE  IF NOT EXISTS

Esto no funciono en un postgres 8.4 y la funcion que realice era en 9.x asi que realice dos funciones para que funcione en mi servidor de aplicaciones en 8.4

 

8.4 9.1
CREATE OR REPLACE FUNCTION myEsquema.crear_tabla(text, text)
RETURNS void AS
$BODY$
DECLARE
nombre_tabla ALIAS FOR $1;
iniciales ALIAS FOR $2;
i boolean;
BEGIN
EXECUTE ‘SELECT EXISTS ( SELECT *   FROM   pg_catalog.pg_tables  WHERE  schemaname = ”myEsquema”  AND    tablename  = ”’||nombre_tabla||”’ )’ INTO    i;
IF i THEN
ELSE
EXECUTE ‘CREATE TABLE myEsquema.rol_’ || nombre_tabla || ‘(‘
||iniciales ||’_id integer  null,’
||iniciales ||’_cedula character varying(10) not null,’
||iniciales ||’_periodo date default null,’
||iniciales ||’_orden int null,’
||iniciales ||’_estado int default 2,’
||iniciales ||’_reg_fecha timestamp without time zone DEFAULT now(),’
||iniciales ||’_reg_usu integer) ‘;
END IF;

END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION myEsquema.crear_tabla(text, text)
OWNER TO postgres;

CREATE OR REPLACE FUNCTION myEsquema.crear_tabla(text, text)
RETURNS void AS
$BODY$
DECLARE
nombre_tabla ALIAS FOR $1;
iniciales ALIAS FOR $2;

BEGIN
execute ‘CREATE TABLE  IF NOT EXISTS myEsquema.rol_’ || nombre_tabla || ‘(‘
||iniciales ||’_id integer  null,’
||iniciales ||’_cedula character varying(10) not null,’
||iniciales ||’_periodo date default null,’
||iniciales ||’_orden int null,’
||iniciales ||’_estado int default 2,’
||iniciales ||’_reg_fecha timestamp without time zone DEFAULT now(),’
||iniciales ||’_reg_usu integer)’;

END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION myEsquema.crear_tabla(text, text)
OWNER TO postgres;

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *