Bonjour,
Je suis confronté à un problème que j'ai retrouvé sur le net mais sans jamais voir de solution évidente (exemple : ce post).

J'ai une table avec un champ texte et un champ tsvector, qui utilise une table toast. Dans une première base où je génère la colonne tsvector après avoir inséré toutes mes données texte.
Par contre dans une autre base où mon champ est généré au fur et à mesure avec un trigger, la taille est bien plus importante et surtout beaucoup plus répartie dans le toast.

Pour être certain qu'il n'y ait pas d'erreur dans mes données, j'ai fait ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select sum(octet_length(text)) as total_text, sum(octet_length(text_tsvector::text)) as total_tsvector from docs;
Mes deux bases renvoient exactement les mêmes valeurs.

Est-ce qu'il y a un moyen de "nettoyer" ces données pour limiter les espaces vides (dans les pages si j'ai bien compris) ?
Mis à part un dump/drop/load =/ (lu sur ce blog mais date de 2006).

Edit : en fait je n'avais fait un VACUUM FULL que sur la seconde base (qui avec un reindex avait réduit la taille de la base toujours en restant bien au dessus de la première). En faisant un VACUUM FULL sur la première base une table toast a bien gonflé, je suppose que les stats de pg_class n'étaient pas à jour. Donc en fait mes tailles de tables sont plus proches qu'au départ, sur la première base elle reste quand même à 2Go de plus alors que les longueurs de champ sont strictement les mêmes.