RE: Vacuum a una tablas

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.

In response to

Browse pgsql-es-ayuda by date

  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