

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Eliminación de la sobrecarga con pg\$1repack
<a name="pg-repack"></a>

Puede usar la extensión `pg_repack` para eliminar la sobrecarga de las tablas y los índices con un bloqueo mínimo de la base de datos. Puede crear esta extensión en la instancia de base de datos y ejecutar el cliente `pg_repack` (si la versión del cliente y la versión de la extensión coinciden) desde Amazon Elastic Compute Cloud (Amazon EC2) o desde un ordenador que se pueda conectar a la base de datos. 

A diferencia de `VACUUM FULL`, `pg_repack` no necesita tiempo de inactividad ni un periodo de mantenimiento y no bloqueará otras sesiones.

`pg_repack` es útil en las situaciones en que es posible que `VACUUM FULL`, `CLUSTER` o `REINDEX` no funcionen. Crea una tabla nueva que contiene los datos de la tabla sobrecargada, realiza un seguimiento de los cambios con respecto a la tabla original y, a continuación, reemplaza la tabla original por la nueva. No bloquea la tabla original para operaciones de lectura o escritura mientras crea la nueva tabla.

Puede utilizar `pg_repack` para una tabla completa o para un índice. Para ver una lista de tareas, consulte la [documentación de pg\$1repack](https://reorg.github.io/pg_repack/).

Limitaciones:
+ Para ejecutar `pg_repack`, la tabla debe tener una clave principal o un índice único.
+ `pg_repack ` no funcionará con las tablas temporales.
+ `pg_repack` no funcionará en las tablas que tengan índices globales.
+ Mientras `pg_repack` esté en curso, no podrá realizar operaciones de DDL en las tablas.

En la siguiente tabla se describen las diferencias entre `pg_repack` y `VACUUM FULL`.


|  |  | 
| --- |--- |
| `VACUUM FULL` | `pg_repack` | 
| Comando integrado | Una extensión que ejecuta desde Amazon EC2 o desde el ordenador local | 
| Requiere un bloqueo `ACCESS EXCLUSIVE` mientras se utiliza en una tabla | Requiere un bloqueo `ACCESS EXCLUSIVE` solo durante un breve periodo de tiempo | 
| Funciona con todas las tablas | Solo funciona en las tablas que tienen claves principales y únicas | 
| Requiere el doble del espacio de almacenamiento que consumen la tabla y los índices | Requiere el doble del espacio de almacenamiento que consumen la tabla y los índices | 

Para ejecutar `pg_repack` en una tabla, use el siguiente comando: 

```
pg_repack -h <host> -d <dbname> --table <tablename> -k
```

Para ejecutar `pg_repack` en un índice, use el siguiente comando:

```
pg_repack -h <host> -d <dbname> --index <index name>
```

Para obtener más información, consulte la entrada en el blog de AWS [Remove bloat from Amazon Aurora and RDS for PostgreSQL with pg\$1repack](https://aws.amazon.com/blogs/database/remove-bloat-from-amazon-aurora-and-rds-for-postgresql-with-pg_repack/).

**Advertencia**  
El error `error-on-invalid-index` de `pg_repack` suele indicar que uno o varios índices de la tabla están dañados o no son válidos. `pg_repack` no puede funcionar de forma segura en las tablas que no tienen índices válidos porque depende de los índices para mantener la coherencia de datos durante el proceso de reempaquetado.   
Este error se produce en las siguientes situaciones:  
El índice está marcado como no válido (por ejemplo, debido a un error en una instrucción `CREATE INDEX CONCURRENTLY`). 
El índice está dañado (posiblemente debido a problemas de hardware o a cierres bruscos).
Utilice la siguiente consulta para identificar los índices no válidos y suprimirlos primero si los encuentra.  

```
SELECT indexrelid::regclass, indisvalid FROM pg_index WHERE indrelid = 'orders'::regclass AND NOT indisvalid; Drop the invalid index: DROP INDEX index_name;
```