¿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

Relevant Blogs

Random Data

This post continues from my report on Random Numbers. I have begun working on a random data generator so I want to run some tests to see whether different random...
December 03, 2020

More Blogs

Full-text search since PostgreSQL 8.3

Welcome to the third – and last – part of this blog series, exploring how the PostgreSQL performance evolved over the years. The first part looked at OLTP workloads, represented...
November 05, 2020

Números aleatorios

He estado trabajando gradualmente en el desarrollo desde cero de herramientas para probar el rendimiento de los sistemas de bases de datos de código abierto. Uno de los componentes de...
November 04, 2020