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