¿Qué partición de mi base de datos PostgreSQL contiene una fila determinada?

November 01, 2020

Si les gusta trabajar con el particionamiento declarativo de PostgreSQL, puede que se pregunten cómo comprobar en qué partición se encuentra un registro específico. Aunque la respuesta es bastante obvia en los casos del particionamiento de lista o de rango, con el particionamiento hash resulta un poco más complicado.

De todas formas, no hay por qué preocuparse. Un método muy rápido para saber en qué partición se encuentra una determinada fila es aprovechar de las columnas de sistema de PostgreSQL, en concreto, tableoid.

Para el siguiente ejemplo, supongamos disponer de una tabla primaria llamada collections, particionada por hash en función del valor de su clave primaria, un campo serial denominado collection_id. Aunque el número de las particiones es irrelevante, en este ejemplo he elegido una cantidad de 32.

SELECT tableoid::pg_catalog.regclass, *
  FROM collections
  WHERE collection_id = 2;

A través de esta consulta sabremos en qué partición de la tabla hash particionada llamada collections se encuentra el registro con el campo collection_id = 2:

    tableoid    | collection_id | ...
----------------+---------------+ ...
 collections_26 |             2 | ...

Como se puede observar, el registro está almacenado, de acuerdo con el nombre que elegí, en la partición 27: collections_26.

Para adaptar el método a un caso concreto, es suficiente que cambien los nombres de las tablas y de las columnas.

Share this

More Blogs