PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Tables temporaires PostgreSQL

Veuillez noter que, dans Postgres, le comportement par défaut des tables temporaires est qu'elles ne sont pas automatiquement supprimées et que les données sont conservées lors de la validation. Voir ON COMMIT .

Les tables temporaires sont cependant supprimées à la fin d'une session de base de données :

Les tables temporaires sont automatiquement supprimées à la fin d'une session, ou éventuellement à la fin de la transaction en cours.

Vous devez tenir compte de plusieurs considérations :

  • Si vous voulez explicitement DROP une table temporaire à la fin d'une transaction, créez-la avec le CREATE TEMPORARY TABLE ... ON COMMIT DROP syntaxe.
  • En présence de regroupement de connexions , une session de base de données peut s'étendre sur plusieurs sessions client ; pour éviter les conflits dans CREATE , vous devez supprimer vos tables temporaires - soit avant de rétablir une connexion au pool (par exemple, en faisant tout à l'intérieur d'une transaction et en utilisant le ON COMMIT DROP syntaxe de création), ou au besoin (en précédant tout CREATE TEMPORARY TABLE instruction avec un DROP TABLE IF EXISTS correspondant , qui a l'avantage de fonctionner également en dehors des transactions, par ex. si la connexion est utilisée en mode de validation automatique.)
  • Pendant que la table temporaire est en cours d'utilisation, quelle quantité tiendra en mémoire avant de déborder sur le disque ? Voir les temp_buffers option dans postgresql.conf
  • Y a-t-il autre chose dont je devrais m'inquiéter lorsque je travaille souvent avec des tables temporaires ? Un aspirateur est recommandé après avoir DROPpé les tables temporaires, pour nettoyer tous les tuples morts du catalogue. Postgres va automatiquement passer l'aspirateur toutes les 3 minutes environ pour vous lorsque vous utilisez les paramètres par défaut (auto_vacuum ).

De plus, sans rapport avec votre question (mais peut-être lié à votre projet) :gardez à l'esprit que, si vous devez exécuter des requêtes sur une table temporaire après vous l'avez rempli, alors c'est une bonne idée de créer des index appropriés et d'émettre un ANALYZE sur la table temporaire en question après vous avez fini d'y insérer. Par défaut, l'optimiseur basé sur les coûts supposera qu'une table temporaire nouvellement créée contient environ 1 000 lignes, ce qui peut entraîner des performances médiocres si la table temporaire contient en réalité des millions de lignes.