Tenga en cuenta que, en Postgres, el comportamiento predeterminado para las tablas temporales es que no se eliminan automáticamente y los datos se conservan en la confirmación. Ver ON COMMIT .
Sin embargo, las tablas temporales se eliminan al final de una sesión de la base de datos:
Las tablas temporales se eliminan automáticamente al final de una sesión u, opcionalmente, al final de la transacción actual.
Hay múltiples consideraciones que debes tener en cuenta:
- Si desea explícitamente
DROPuna tabla temporal al final de una transacción, créela conCREATE TEMPORARY TABLE ... ON COMMIT DROPsintaxis. - En presencia de agrupación de conexiones , una sesión de base de datos puede abarcar varias sesiones de cliente; para evitar conflictos en
CREATE, debe descartar sus tablas temporales, ya sea antes de devolver una conexión al grupo (por ejemplo, haciendo todo dentro de una transacción y usandoON COMMIT DROPsintaxis de creación), o según sea necesario (precediendo cualquierCREATE TEMPORARY TABLEdeclaración con un correspondienteDROP TABLE IF EXISTS, que tiene la ventaja de trabajar también con transacciones externas, p. si la conexión se usa en modo de confirmación automática). - Mientras la tabla temporal está en uso, ¿cuánto cabrá en la memoria antes de desbordarse en el disco? Ver los
temp_buffersopción enpostgresql.conf - ¿Hay algo más de lo que deba preocuparme cuando trabajo a menudo con tablas temporales? Se recomienda una aspiradora después de haber eliminado las tablas temporales, para limpiar las tuplas inactivas del catálogo. Postgres aspirará automáticamente cada 3 minutos más o menos cuando utilice la configuración predeterminada (
auto_vacuum).
Además, sin relación con su pregunta (pero posiblemente relacionado con su proyecto):tenga en cuenta que, si tiene que ejecutar consultas en una tabla temporal después lo ha rellenado, entonces es una buena idea crear índices apropiados y emitir un ANALYZE en la tabla temporal en cuestión después ya terminaste de insertarlo. De forma predeterminada, el optimizador basado en costos asumirá que una tabla temporal recién creada tiene ~1000 filas y esto puede resultar en un bajo rendimiento si la tabla temporal realmente contiene millones de filas.