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

Mises à jour en place avec PostgreSQL

Seuls les champs stockés en ligne doivent être copiés. Pour les champs stockés hors ligne dans les tables TOAST, seule la référence à l'entrée TOAST est copiée.

Le fait qu'un champ soit stocké hors ligne dépend de la taille de la valeur dans le champ et du type de données du champ.

Si les tuples sont grands mais n'ont que quelques champs - comme

some_id integer,
frequently_updated integer,
charblob text

alors il n'y a pas grand intérêt à changer quoi que ce soit car les mises à jour de frequently_updated ne réécrira généralement pas les données dans charblob , du moins s'il est assez grand pour qu'il en vaille la peine.

OTOH, si vous avez une table avec beaucoup de champs, vous en réécrirez beaucoup plus à chaque mise à jour.

HOT ne vous aidera que dans une mesure limitée car une mise à jour HOT ne peut se produire que lorsqu'aucune colonne mise à jour ne fait partie d'un index et il y a suffisamment d'espace libre sur la même page de base de données. Pour les rangées larges, vous ne tiendrez pas beaucoup de copies sur une page, même avec TOAST, donc HOT sera d'un avantage limité.

Il peut être utile de séparer ces champs dans des tables distinctes s'ils sont très fréquemment mis à jour, mais le reste de la table comporte de larges lignes qui ne changent pas beaucoup.