pg_repack
Scenarios
pg_repack can reorganize tables and indexes with minimal locks to restore the physical order. Unlike CLUSTER and VACUUM FULL it works online, without holding an exclusive lock on the processed tables during processing.
Constraints
- Only the root user can use pg_repack.
- The target table must have a primary key or at least a unique total index on a NOT NULL column.
- Performing a full-table repack requires free disk space about twice as large as the target table and its indexes.
- pg_repack cannot reorganize temp tables or cluster tables by GiST indexes.
- You will not be able to perform DDL commands of the target table except VACUUM or ANALYZE while pg_repack is working.
- pg_repack can be used only after a client is deployed locally. For details, see the official documentation at https://reorg.github.io/pg_repack/.
How to Use
- Install the extension.
select control_extension('create', 'pg_repack');
- Delete the extension.
select control_extension('drop', 'pg_repack');
For more information, see Installing and Uninstalling an Extension on the RDS Console and Installing and Uninstalling an Extension Using SQL Commands.
Example
Use pg_repack to repack a table.
- Create a test table 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'));
- Repack the test table.
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: IP address of the RDS DB instance.
- DB_PORT: Port of the RDS DB instance.
- DB_NAME: Name of the database where the pg_repack_test table is located.
- Check the size of the repacked table.
select pg_size_pretty(pg_relation_size('pg_repack_test'));
FAQs
Error Information |
Solution |
---|---|
ERROR: pg_repack failed with error: ERROR: permission denied for schema repack |
Use the root user. |
ERROR: pg_repack failed with error: You must be a superuser to use pg_repack |
Add --no-superuser-check to skip superuser checks. |
NOTICE: Waiting for 1 transactions to finish. First PID: xxxx |
Wait until the transaction is complete. |
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot