Hola Mario,

La tabla no está particionada, y se pueden borrar los registros usando sólo
el num_ruc

podría usar también delete from comprobantes where num_ruc in
('aaaa','bbbb','cccc','dddd','eeee')
pero hay clientes que tienen históricos de millones de registros y puede
tardar un par de horas en ejecutar la operación.

La idea del particionamiento es poder hacer drop table
comprobante_num_ruc y recuperar el espacio además de llevar
el registro de cuáles clientes se realizó la limpieza.

pg_rewrite voy a revisarlo.

El mar, 26 sept 2023 a las 15:20, Mario González Troncoso (<
gonzalema...@gmail.com>) escribió:

> On Tue, 26 Sept 2023 at 13:43, Jairo Graterón <jgrate...@gmail.com> wrote:
> >
> > Saludos lista
> >
> > Tengo un requerimiento sobre liberar el espacio ocupado por registros de
> ventas de
> > los clientes que ya no tienen relación comercial con nosotros.
> >
> > Actualmente la tabla comprobantes tiene 2mil millones de registros,
> debido a que
> > tiene registros de históricos de ventas proporcionados por el estado
> para controlar
> > la emisión única de comprobantes.
> >
> > Cada cliente tiene su identificador único num_ruc junto con el número de
> comprobante es la clave primaria.
> >
> > Hacer un delete from comprobantes where num_ruc='xxx' no es óptimo ya
> que es lento y el espacio no se recupera en el disco, usamos servicios en
> la nube y cobran por espacio ocupado.
> >
>
> Pero si entiendo bien, si tienes que borrar los registros de algunos
> clientes y parte de la clave primaria es el identificador del cliente,
> ¿por qué tienes que indicar el número de comprobante para borrar?
> Cuando creaste la table, creaste particiones? Sino lo hiciste, no
> puedes transformar una tabla normal a una particionada [1]
>
> Asumiendo que es una tabla normal yo pensaría en estas 2 opciones:
> a) Buscaría un filtro para ejecutar "DELETE FROM comprobantes WHERE
> <FILTRO>..." Y ejecutaría VACUUM FULL al final para devolver el
> espacio al sistema operativo
> b) Usaría pg_rewrite [2] para generar un nuevo esquema de tablas con
> particiones. esto significaría tener suficiente espacio en disco para
> duplicar la tabla.
>
> Personalmente no he usado `pg_rewrite` pero lo que mencionas se puede
> hacer con esta extensión.
>
> [1]
> https://www.postgresql.org/docs/current/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE
> [2]
> https://www.cybertec-postgresql.com/en/pg_rewrite-postgresql-table-partitioning/
>
> > Así que me gustaría sus experiencias si han implementado
> particionamiento de tablas ya que veo que no es necesario hacer delete sino
> drop table.
> >
> > Haciendo cálculos tendríamos la tabla maestra y 8mil tablas relacionadas
> por cada cliente asociado.
> >
>
>
> --
> https://www.linkedin.com/in/gonzalemario
>

Reply via email to