

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Remoção do inchaço com pg\$1repack
<a name="pg-repack"></a>

Você pode usar a extensão `pg_repack` para remover o inchaço da tabela e do índice com o mínimo de bloqueio do banco de dados. Você pode criar essa extensão na instância do banco de dados e executar o cliente `pg_repack` (em que a versão do cliente corresponde à versão da extensão) do Amazon Elastic Compute Cloud (Amazon EC2) ou de um computador que possa se conectar ao seu banco de dados. 

Diferentemente do `VACUUM FULL`, o `pg_repack` não exige tempo de inatividade ou janela de manutenção e não bloqueia outras sessões.

O `pg_repack` é útil em situações em que `VACUUM FULL`, `CLUSTER` ou `REINDEX` pode não funcionar. Ele cria uma tabela que contém os dados da tabela inchada, monitora as alterações na tabela original e, em seguida, substitui a tabela original pela nova. Ele não bloqueia a tabela original para operações de leitura ou gravação enquanto está criando a outra tabela.

Você pode usar `pg_repack` para uma tabela completa ou para um índice. Para ver uma lista de tarefas, consulte a [documentação do pg\$1repack](https://reorg.github.io/pg_repack/).

Limitações:
+ Para executar o `pg_repack`, sua tabela deve ter uma chave primária ou um índice exclusivo.
+ O `pg_repack ` não funcionará com tabelas temporárias.
+ O `pg_repack` não funcionará em tabelas que tenham índices globais.
+ Quando o `pg_repack` está em andamento, não é possível realizar operações de DDL em tabelas.

A tabela a seguir descreve as diferenças entre `pg_repack` e `VACUUM FULL`.


|  |  | 
| --- |--- |
| `VACUUM FULL` | `pg_repack` | 
| Comando integrado | Uma extensão que você executa no Amazon EC2 ou no seu computador local | 
| Requer um bloqueio `ACCESS EXCLUSIVE` enquanto está operando em uma tabela | Requer um bloqueio `ACCESS EXCLUSIVE` apenas por um curto período | 
| Funciona com todas as tabelas | Funciona em tabelas que têm somente chaves primárias e exclusivas | 
| Requer o dobro do armazenamento consumido pela tabela e pelos índices | Requer o dobro do armazenamento consumido pela tabela e pelos índices | 

Para executar `pg_repack` em uma tabela, use o comando: 

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

Para executar `pg_repack` em um índice, use o comando:

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

Para obter mais informações, consulte a publicação do Blog da 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/).

**Advertência**  
O erro `error-on-invalid-index` no `pg_repack` geralmente significa que um ou mais índices na tabela estão corrompidos ou são inválidos. O `pg_repack` não pode operar com segurança em tabelas com índices inválidos, porque depende dos índices para a consistência de dados durante o processo de empacotamento.   
Esse erro ocorre quando:  
O índice está marcado como inválido (por exemplo, devido a uma instrução `CREATE INDEX CONCURRENTLY` com falha). 
O índice está corrompido (possivelmente devido a problemas de hardware ou desligamentos abruptos).
Use a consulta a seguir para identificar índices inválidos e eliminá-los primeiro, caso você os encontre.  

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