Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-06-06 GMT+08:00

Uso de pg_repack

Escenarios

pg_repack puede reorganizar tablas e índices con bloqueos mínimos para restaurar el orden físico. A diferencia de CLUSTER y VACUUM FULL, funciona en línea, sin tener una cerradura exclusiva en las mesas procesadas durante el procesamiento.

Restricciones

  • Solo el usuario root puede usar pg_repack.
  • La tabla de destino debe tener una clave principal o al menos un índice total único en una columna NOT NULL.
  • La realización de un reempaquetado de tabla completa requiere espacio libre en disco aproximadamente el doble que la tabla de destino y sus índices.
  • pg_repack no puede reorganizar tablas temporales o tablas de clúster mediante índices GiST.
  • No podrá ejecutar comandos DDL de la tabla de destino excepto VACUUM o ANALYZE mientras pg_repack esté funcionando.
  • pg_repack solo se puede usar después de que un cliente se implemente localmente. Para obtener más información, consulte la documentación oficial en https://reorg.github.io/pg_repack/.

Cómo usar

  • Instalar el complemento.
    select control_extension('create', 'pg_repack');
  • Eliminar el complemento.
    select control_extension('drop', 'pg_repack');

Para obtener más información, consulte Instalación y desinstalación de un complemento en la consola de RDS y Instalación y desinstalación de un complemento mediante comandos SQL.

Ejemplo

Utilizar pg_repack para volver a empaquetar una tabla.

  1. Crear una tabla de prueba de pg_repack_test.
    create table pg_repack_test(id bigint primary key, name varchar); 
    insert into pg_repack_test select i , to_char(random()*100000, 'FM000000') from generate_series(1, 1000000) i;
    delete from pg_repack_test where id in (select i  from generate_series(1, 600000, 2) i);
    select pg_size_pretty(pg_relation_size('pg_repack_test'));
  2. Reempaquetar la tabla de prueba.
    pg_repack --host=<RDS_ADDRESS> --port=<DB_PORT> --dbname=<DB_NAME> --username=root --no-superuser-check --no-kill-backend -t pg_repack_test 
    • RDS_ADDRESS: dirección de IP de la instancia de base de datos de RDS.
    • DB_PORT: Puerto de la instancia de base de datos de RDS.
    • DB_NAME: Nombre de la base de datos donde se encuentra la tabla pg_repack_test.
  3. Comprobar el tamaño de la tabla reempaquetada.
    select pg_size_pretty(pg_relation_size('pg_repack_test'));

Preguntas frecuentes

Tabla 1 Información y soluciones de errores comunes

Información de error

Solución

ERROR: pg_repack failed with error: ERROR: permission denied for schema repack

Utilice el usuario root.

ERROR: pg_repack failed with error: You must be a superuser to use pg_repack

Agregue --no-superuser-check para omitir las comprobaciones de superusuario.

NOTICE: Waiting for 1 transactions to finish. First PID: xxxx

Espere hasta que se complete la transacción.