Ese es el camino, sólo pregunté por sus experiencias.

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

> On Tue, 26 Sept 2023 at 16:39, Jairo Graterón <jgrate...@gmail.com> wrote:
> >
> > 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.
> >
>
> Creo que te estas complicando demás. Con lo que comentas, suena que el
> problema va en el modelo porque parece que no puedes identificar
> fácilmente a quienes no son tus clientes.
>
> Ahora si tu intención es meramente usar particiones, creo que ya
> tienes tu respuesta.
>
> > 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