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 leCREATE 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 leON COMMIT DROP
syntaxe de création), ou au besoin (en précédant toutCREATE TEMPORARY TABLE
instruction avec unDROP 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 danspostgresql.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.