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 >