it-swarm-fr.com

PostgreSQL: espace disque non libéré après tronquage

J'ai TRUNCATEd une énorme table (~ 120 Go) appelée files:

TRUNCATE files;
VACUUM FULL files;

La taille de la table est 0, mais aucun espace disque n'a été libéré. Des idées Comment réclamer mon espace disque perdu?

Mise à jour : L'espace disque a été libéré après environ 12 heures, sans aucune action de mon côté. J'utilise le serveur Ubuntu 8.04.

12
Adam Matan

Selon Commentaires dans la source , truncate crée un nouveau fichier de stockage vide et supprime l'ancien fichier de stockage au moment de la validation. (Docs suggère que le "fichier de stockage" est juste un fichier en ce qui concerne le système d'exploitation, mais je pourrais peut-être mal comprendre la terminologie.)

Créez un nouveau fichier de stockage vide pour la relation et attribuez-la sous forme de valeur Relfilenode. L'ancien fichier de stockage est prévu pour Supprimer à commit.

Comme il semble de supprimer un fichier, je peux imaginer des cas dans lesquels le système d'exploitation sous-jacent pourrait ne pas libérer immédiatement cet espace. J'imagine que dans certains cas, le fichier de stockage pourrait se retrouver dans le bac de recyclage sous Windows, par exemple. Mais dans mon cas, tronquer une table sous PostgreSQL 9.Quelque chose a immédiatement augmenté le freepace sous Windows.

La troncature est également enregistrée dans le journal WAL. Je ne sais pas combien d'effet qui pourrait avoir.