sql >> Base de Datos >  >> RDS >> PostgreSQL

Actualizaciones en el lugar con PostgreSQL

Solo es necesario copiar los campos almacenados en línea. Para los campos almacenados fuera de línea en las tablas TOAST, solo se copia la referencia a la entrada TOAST.

Que un campo se almacene fuera de línea depende del tamaño del valor en el campo y del tipo de datos del campo.

Si las tuplas son grandes pero solo tienen unos pocos campos, como

some_id integer,
frequently_updated integer,
charblob text

entonces no tiene mucho sentido cambiar nada porque las actualizaciones de frequently_updated generalmente no reescribirá los datos en charblob , al menos si es lo suficientemente grande como para que valga la pena cuidarlo.

OTOH, si tiene una tabla con muchos campos, reescribirá muchos más con cada actualización.

HOT solo lo ayudará de forma limitada porque una actualización HOT solo puede ocurrir cuando ninguna columna actualizada es parte de un índice y hay suficiente espacio libre en la misma página de la base de datos. Para filas anchas, no caben muchas copias en una página, incluso con TOAST, por lo que HOT tendrá un beneficio limitado.

Puede valer la pena separar dichos campos en tablas separadas si se actualizan con mucha frecuencia, pero el resto de la tabla tiene filas anchas que no cambian mucho.