

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Rimuovere il bloat con pg\_repack
<a name="pg-repack"></a>

Puoi utilizzare l'`pg_repack`estensione per rimuovere il gonfiore di tabelle e indici con un blocco minimo del database. Puoi creare questa estensione nell'istanza del database ed eseguire il `pg_repack` client (dove la versione del client corrisponde alla versione dell'estensione) da Amazon Elastic Compute Cloud (Amazon EC2) o da un computer in grado di connettersi al database. 

Al contrario`VACUUM FULL`, `pg_repack` non richiede tempi di inattività o una finestra di manutenzione e non blocca altre sessioni.

`pg_repack`è utile in situazioni in cui `VACUUM FULL``CLUSTER`, o `REINDEX` potrebbe non funzionare. Crea una nuova tabella che contiene i dati della tabella gonfia, tiene traccia delle modifiche rispetto alla tabella originale e quindi sostituisce la tabella originale con quella nuova. Non blocca la tabella originale per le operazioni di lettura o scrittura durante la creazione della nuova tabella.

È possibile utilizzarlo `pg_repack` per una tabella completa o per un indice. Per visualizzare un elenco di attività, consulta la documentazione di [pg\_repack](https://reorg.github.io/pg_repack/).

Restrizioni:
+ Per essere eseguita`pg_repack`, la tabella deve avere una chiave primaria o un indice univoco.
+ `pg_repack `non funzionerà con tabelle temporanee.
+ `pg_repack`non funzionerà su tabelle con indici globali.
+ Quando `pg_repack` è in corso, non è possibile eseguire operazioni DDL sulle tabelle.

Nella tabella seguente vengono descritte le differenze tra `pg_repack` e`VACUUM FULL`.


|  |  | 
| --- |--- |
| `VACUUM FULL` | `pg_repack` | 
| Comando integrato | Un'estensione che esegui da Amazon EC2 o dal tuo computer locale | 
| Richiede un `ACCESS EXCLUSIVE` lucchetto mentre funziona su un tavolo | Richiede una `ACCESS EXCLUSIVE` serratura solo per un breve periodo | 
| Funziona con tutti i tavoli | Funziona solo su tabelle con chiavi primarie e univoche | 
| Richiede il doppio dello spazio di archiviazione utilizzato dalla tabella e dagli indici | Richiede il doppio dello spazio di archiviazione utilizzato dalla tabella e dagli indici | 

Per eseguire `pg_repack` su una tabella, usa il comando: 

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

Per eseguire `pg_repack` su un indice, usa il comando:

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

Per ulteriori informazioni, consulta il post del AWS blog [Rimuovere bloat da Amazon Aurora e RDS per PostgreSQL](https://aws.amazon.com/blogs/database/remove-bloat-from-amazon-aurora-and-rds-for-postgresql-with-pg_repack/) con pg\_repack.

**Avvertenza**  
L'`error-on-invalid-index`errore in indica in `pg_repack` genere che uno o più indici della tabella sono danneggiati o non validi. `pg_repack`non può operare in modo sicuro su tabelle con indici non validi, poiché si basa sugli indici per la coerenza dei dati durante il processo di repack.   
Questo errore si verifica quando:  
L'indice è contrassegnato come non valido (ad esempio, a causa di un'`CREATE INDEX CONCURRENTLY`istruzione non riuscita). 
L'indice è danneggiato (probabilmente a causa di problemi hardware o arresti improvvisi).
Usa la seguente query per identificare gli indici non validi e per eliminarli per primi se li trovi.  

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