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