mauricio pullabuestan escribió:
> Buen día.
> 
> Tengo una función que utiliza una tabla temporal con un indice don ingreso y 
> actualizo datos, luego hago un update a otras tablas en base a a la data de 
> la tabla temporal.
> 
> Según leí el rendimiento es mejor en una tabla física que una temporal, 
> entonces quiero cambiar la tabla temporal con una tabla Unlogged y que al 
> final de la función los registros de dicha tabla se eliminen automáticamente.
> 
> Esta función es llamada por varios usuarios, como cada uno tiene su propia 
> transacción, los datos serán independientes, por lo cual no habría problema 
> con la concurrencia.
> 
> Mi definición de la tabla seria algo como esto.
> 
> Create unlogged table miesquema.item_costo
> (
> item integer, 
> tiene_componenten boolean, 
> costo numeric(12, 8),
> ...
> ) ON COMMIT DELETE ROWS;
> 
> Pero me lanza un error "On Commit solo puede ser usado con tablas
> temporales", existe algún mecanismo para vaciar la tabla al salir de
> la función? 

No, pero podrías usar TRUNCATE.

¿Dónde leíste que una tabla unlogged era mejor que una tabla temporal?
Hasta donde yo sé, la única diferencia es en qué punto una o la otra se
van a disco; y para una tabla temporal puedes controlarlo con el
parámetro temp_buffers.  Quizás podrías probar si mejora poniendo
temp_buffers en un tamaño donde quepa la tabla completa, para evitar que
se escriba a disco.

-- 
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a