pg_squeeze
pg_squeeze : A tool to remove unused space from a relation.
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 5040 | pg_squeeze | pg_squeeze | 1.9.4 |
ADMIN | BSD-2-Clause | C |
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
| --sLd-- | No | Yes | Yes | Yes | no | no |
| Relationships | |
|---|---|
| Schemas | squeeze |
| See Also | pg_repack pgstattuple pg_dirtyread pg_rewrite pg_column_tetris |
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PGDG | 1.9.4 |
18 17 16 15 14 | pg_squeeze |
- |
| RPM | PGDG | 1.9.4 |
18 17 16 15 14 | pg_squeeze_$v |
- |
| DEB | PGDG | 1.9.4 |
18 17 16 15 14 | postgresql-$v-squeeze |
- |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| el8.aarch64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| el9.x86_64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| el9.aarch64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| el10.x86_64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| el10.aarch64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| d12.x86_64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| d12.aarch64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| d13.x86_64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| d13.aarch64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| u22.x86_64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| u22.aarch64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| u24.x86_64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| u24.aarch64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| u26.x86_64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
| u26.aarch64 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 | PGDG 1.9.4 |
Source
github.com/cybertec-postgresql/pg_squeeze
Install
Make sure PGDG repo available:
Install this extension with pig:
Config this extension to shared_preload_libraries:
Create this extension with:
Usage
Sources:
pg_squeeze removes bloat from a table and its indexes while allowing concurrent reads and writes. It copies live tuples to new storage and applies concurrent changes through logical decoding, avoiding the long exclusive lock of VACUUM FULL. Use it only after sizing replication slots, disk space, and the table’s replica identity.
Configure and Install
Restart PostgreSQL, then create the extension:
The table must have an identity index. A primary key works with the default replica identity; otherwise select a suitable unique index with ALTER TABLE ... REPLICA IDENTITY USING INDEX.
Run an Ad-Hoc Squeeze
The function starts background work and is not transactional in the ordinary SQL-function sense. Monitor the operation rather than assuming a surrounding ROLLBACK cancels it.
Schedule Tables and Monitor Work
The schedule tuple contains minutes, hours, days of month, months, and days of week. Registration also supports thresholds and placement options such as free_space_extra, min_size, vacuum_max_age, max_retry, clustering_index, relation/index tablespaces, and skip_analyze.
For automatic startup:
Version 1.9.4 and Operational Caveats
- Version 1.9.4 fixes unsafe quoting in dynamically constructed
ANALYZE, log, and error statements, including a superuser SQL-injection path. Upgrade earlier 1.9 builds promptly. - A full-table squeeze needs free disk space of roughly twice the combined size of the target table and its indexes.
- Disruptive DDL,
VACUUM FULL,CLUSTER, orTRUNCATEcan make an in-progress squeeze abort. Coordinate schema changes and usemax_retrydeliberately. - Like other online rewrite tools,
pg_squeezechanges row visibility and has documented MVCC caveats for concurrent sessions that retain old snapshots. - Configure
pg_squeezeinshared_preload_librarieson the new cluster beforepg_upgradeor dump/restore of a database containing the extension. - Current Pigsty packages cover PostgreSQL 14-18. For those versions, keep
wal_level = logical; upstream’s relaxed PostgreSQL 19 rule does not apply to this package matrix yet.