sql >> Base de Datos >  >> RDS >> PostgreSQL

Tablas temporales de PostgreSQL

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 DROP una tabla temporal al final de una transacción, créela con CREATE TEMPORARY TABLE ... ON COMMIT DROP sintaxis.
  • 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 usando ON COMMIT DROP sintaxis de creación), o según sea necesario (precediendo cualquier CREATE TEMPORARY TABLE declaración con un correspondiente DROP 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_buffers opción en postgresql.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.