Cómo conseguir poda de particiones en PostgreSQL filtrando por columnas distintas de la clave

Fuentes: How to Achieve Pruning When Querying by Non-Partitioned Columns in PostgreSQL

Las tablas particionadas en PostgreSQL solo aplican poda de particiones cuando la consulta incluye la clave de partición, lo que obliga a menudo a elegir una columna poco práctica. Este artículo explica una técnica para conseguir esa poda aunque se filtre por otras columnas, como session_id, aprovechando particularidades del modelo de datos.

El texto parte de un ejemplo realista: una tabla de eventos de un sitio web particionada por rango temporal (un año por partición) y poblada con unos 50.000 registros. Se muestra cómo una consulta por fecha utiliza poda de particiones de forma automática, mientras que una búsqueda por session_id obliga al motor a recorrer todas las particiones, incluso con índices locales. También se explica por qué los índices globales, que resolverían el problema, no están disponibles en PostgreSQL 19 y por qué resulta difícil imponer restricciones de unicidad fuera de la clave.

La clave de la solución está en explotar tres propiedades del dominio: la tabla es solo de inserción (eventos inmutables), los identificadores de sesión se generan de forma secuencial y cada sesión dura pocos minutos. Combinando esas características con la propia clave de partición es posible reducir el conjunto de particiones que el motor debe inspeccionar al consultar por session_id, mejorando el rendimiento sin necesidad de cambiar el esquema de particionado ni esperar a futuras versiones del motor.