From: | "Mario Alberto Soto Cordones" <marioa(dot)soto(dot)cordones(at)gmail(dot)com> |
---|---|
To: | "'Fernando Hevia'" <fhevia(at)gmail(dot)com> |
Cc: | "'Ayuda'" <pgsql-es-ayuda(at)postgresql(dot)org>, <pgsql-es-ayuda-owner(at)postgresql(dot)org> |
Subject: | RE: Vacuum a una tablas |
Date: | 2013-04-27 17:51:38 |
Message-ID: | 517c0228.4888ec0a.78de.74ab@mx.google.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola Fernando:
..esta es la función:
CREATE OR REPLACE FUNCTION public.respalda_msj (
integer
)
RETURNS void AS
$body$
declare diaAnterior varchar;
declare diaPosterior varchar;
declare numTabla varchar;
declare funcion varchar := '';
BEGIN
BEGIN
select (case when (to_char(current_date,'d')::integer -1 = 0) then 7
else to_char(current_date,'d')::integer -1 end) into numTabla;
select to_char(current_date - $1,'YYYYMMDD') into diaAnterior;
select to_char(current_date + (7 - $1),'YYYYMMDD') into
diaPosterior;
funcion:= 'ALTER TABLE mensaje_ms_' || numTabla || ' RENAME
TO mensaje_ms_' || diaAnterior || ' ;';
EXECUTE FUNCION;
--ALTER TABLE mensaje_ms_4 RENAME TO mensaje_ms_20130418;
--raise notice '% primero %',diaPosterior ,funcion;
funcion:= 'CREATE TABLE mensaje_ms_'|| numTabla||
' ( ms_id serial NOT NULL primary key,
ms_fecha timestamp without time zone NOT NULL DEFAULT now(),
ms_contenido text,
ms_estado smallint NOT NULL DEFAULT 0,
ms_query text,
ms_fecha_upd timestamp without time zone,
ms_estado_inv smallint NOT NULL DEFAULT 0,
ms_puerto smallint NOT NULL,
av_serie character varying(50))
WITH ( OIDS=FALSE );
GRANT ALL ON TABLE mensaje_ms_'|| numTabla ||' TO postgres;
GRANT SELECT ON TABLE mensaje_ms_'|| numTabla ||' TO
"us_leeMsj"; ';
EXECUTE FUNCION;
--raise notice ' segundo %',funcion;
funcion:= 'CREATE INDEX idx_av_serie_' || diaPosterior || '
ON mensaje_ms_' || numTabla || ' USING btree (av_serie COLLATE
pg_catalog."default" );
CREATE INDEX idx_ms_estado_' || diaPosterior || ' ON
mensaje_ms_' || numTabla || ' USING btree (ms_estado );
CREATE INDEX idx_ms_fecha_' || diaPosterior || ' ON
mensaje_ms_' || numTabla || ' USING btree (ms_fecha );
CREATE INDEX idx_ms_puerto_' || diaPosterior || ' ON
mensaje_ms_' || numTabla || ' USING btree (ms_puerto );
CREATE INDEX idx_serie_estado_' || diaPosterior || ' ON
mensaje_ms_' || numTabla || ' USING btree (av_serie COLLATE
pg_catalog."default" , ms_estado );';
EXECUTE FUNCION;
--raise notice ' tercero %',funcion;
COMMIT;
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'FALLO PROCESO :: %', SQLERRM;
END;
COMMIT;
funcion:= 'VACUUM (ANALYZE) public.mensaje_ms_' || diaAnterior || ' ;';
EXECUTE FUNCION;
RETURN;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
RETURNS NULL ON NULL INPUT
SECURITY INVOKER
COST 100;
Al ejecutarla como select * from respalda_msj(2);
Arroja este error:
NOTICE: CREATE TABLE will create implicit sequence "mensaje_ms_6_ms_id_seq"
for serial column "mensaje_ms_6.ms_id"
CONTEXT: SQL statement "CREATE TABLE mensaje_ms_6 ( ms_id serial NOT NULL
primary key,
ms_fecha timestamp without time zone NOT NULL DEFAULT now(),
ms_contenido text,
ms_estado smallint NOT NULL DEFAULT 0,
ms_query text,
ms_fecha_upd timestamp without time zone,
ms_estado_inv smallint NOT NULL DEFAULT 0,
ms_puerto smallint NOT NULL,
av_serie character varying(50))
WITH ( OIDS=FALSE );
GRANT ALL ON TABLE mensaje_ms_6 TO postgres;
GRANT SELECT ON TABLE mensaje_ms_6 TO "us_leeMsj"; "
PL/pgSQL function "respalda_msj" line 35 at EXECUTE statement
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"mensaje_ms_6_pkey" for table "mensaje_ms_6"
CONTEXT: SQL statement "CREATE TABLE mensaje_ms_6 ( ms_id serial NOT NULL
primary key,
ms_fecha timestamp without time zone NOT NULL DEFAULT now(),
ms_contenido text,
ms_estado smallint NOT NULL DEFAULT 0,
ms_query text,
ms_fecha_upd timestamp without time zone,
ms_estado_inv smallint NOT NULL DEFAULT 0,
ms_puerto smallint NOT NULL,
av_serie character varying(50))
WITH ( OIDS=FALSE );
GRANT ALL ON TABLE mensaje_ms_6 TO postgres;
GRANT SELECT ON TABLE mensaje_ms_6 TO "us_leeMsj"; "
PL/pgSQL function "respalda_msj" line 35 at EXECUTE statement
NOTICE: FALLO PROCESO :: cannot begin/end transactions in PL/pgSQL
ERROR: cannot begin/end transactions in PL/pgSQL
HINT: Use a BEGIN block with an EXCEPTION clause instead.
CONTEXT: PL/pgSQL function "respalda_msj" line 52 at SQL statement
********** Error **********
ERROR: cannot begin/end transactions in PL/pgSQL
SQL state: 0A000
Hint: Use a BEGIN block with an EXCEPTION clause instead.
Context: PL/pgSQL function "respalda_msj" line 52 at SQL statement
De: Fernando Hevia [mailto:fhevia(at)gmail(dot)com]
Enviado el: sábado, 27 de abril de 2013 12:27
Para: Mario Alberto Soto Cordones
CC: Ayuda; pgsql-es-ayuda-owner(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Vacuum a una tablas
2013/4/27 Mario Alberto Soto Cordones <marioa(dot)soto(dot)cordones(at)gmail(dot)com>
Hola Lista:
Estoy tratando de hacer un vacuum a una tabla cuyo nombre se pasa por
parámetro dentro de un script o una unción, en ninguno de los 2 casos me
funciona, solo me funciona el vacuumdb, pero eso no es lo que quiero
..alguien me puede ayudar
Si se puede ejecutar vacuum en una función. Sería un buen comienzo que
postees el comando tal cual lo ejecutas y el error que arroja.
From | Date | Subject | |
---|---|---|---|
Next Message | Mario Alberto Soto Cordones | 2013-04-27 18:10:59 | ERROR: VACUUM cannot be executed from a function or multi-command string |
Previous Message | Mario Alberto Soto Cordones | 2013-04-27 16:41:30 | Vacuum a una tablas |