Postgres 19 sustituirá pglz por LZ4 como compresión por defecto en TOAST

Fuentes: Postgres 19 Compression: from pglz to LZ4

Postgres 19 cambiará el algoritmo de compresión por defecto de su subsistema TOAST, pasando de pglz a LZ4. El movimiento forma parte de una evolución que el proyecto de código abierto arrancó en la versión 14, cuando LZ4 se incorporó como opción configurable.

TOAST (The Oversized-Attribute Storage Technique) es el mecanismo que usa Postgres para guardar valores que no caben en una fila de 8 kB: comprime o mueve los datos a una tabla auxiliar y deja en la fila principal un puntero de 18 bytes. Hasta ahora, el compresor empleado era pglz, un algoritmo escrito por Jan Wieck dentro del propio proyecto para ser rápido, consumir poca memoria y no depender de librerías externas. Con los años, sus compromisos de diseño —una ventana deslizante de solo 4 kB— se han quedado cortos frente al hardware actual.

LZ4, en cambio, trabaja con una ventana de 64 kB y encuentra más referencias hacia atrás en los datos. En pruebas no científicas realizadas por el autor del artículo, una inserción de unas 2.000 filas con valores de unos 10 kB pasó de unos 50 ms con pglz a unos 6 ms con LZ4 (ocho veces más rápido), y el espacio en heap ocupado se redujo de 472 kB a 312 kB. En algunos conjuntos de datos, eso sí, pglz todavía logra una mejor tasa de compresión. LZ4 también conserva una salida rápida cuando los datos no son compresibles.

El artículo repasa además las estrategias de almacenamiento (EXTENDED, PLAIN, EXTERNAL y MAIN), el formato varlena y el árbol de decisión que sigue Postgres para decidir si una columna se queda en línea, se comprime o se envía a TOAST, y muestra una consulta con pg_column_size y octet_length para medir el ahorro real.