Skip to content
pg_partman

pg_partman

pg_partman : Extension to manage partitioned tables by time or ID

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
2510
pg_partman
pg_partman
5.4.3
OLAP
PostgreSQL
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s-d--
No
Yes
No
Yes
no
no
Relationships
Requires
plpgsql
Need By
timeseries
See Also
citus
pg_fkpart
timescaledb
periods
emaj
pg_cron
plproxy
temporal_tables

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PGDG
5.4.3
18
17
16
15
14
pg_partmanplpgsql
RPM
PGDG
5.4.3
18
17
16
15
14
pg_partman_$v-
DEB
PGDG
5.4.3
18
17
16
15
14
postgresql-$v-partman-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
el8.aarch64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
el9.x86_64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
el9.aarch64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
el10.x86_64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
el10.aarch64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
d12.x86_64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
d12.aarch64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
d13.x86_64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
d13.aarch64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
u22.x86_64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
u22.aarch64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
u24.x86_64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
u24.aarch64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
u26.x86_64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
u26.aarch64
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PGDG 5.4.3
PackageVersionOSORGSIZEFile URL
pg_partman_185.4.3el8.x86_64pgdg279.6 KiBpg_partman_18-5.4.3-1PGDG.rhel8.10.x86_64.rpm
pg_partman_185.4.2el8.x86_64pgdg279.0 KiBpg_partman_18-5.4.2-1PGDG.rhel8.10.x86_64.rpm
pg_partman_185.4.1el8.x86_64pgdg278.6 KiBpg_partman_18-5.4.1-1PGDG.rhel8.10.x86_64.rpm
pg_partman_185.4.0el8.x86_64pgdg275.3 KiBpg_partman_18-5.4.0-1PGDG.rhel8.10.x86_64.rpm
pg_partman_185.3.1el8.x86_64pgdg271.3 KiBpg_partman_18-5.3.1-1PGDG.rhel8.x86_64.rpm
pg_partman_185.3.0el8.x86_64pgdg270.4 KiBpg_partman_18-5.3.0-1PGDG.rhel8.x86_64.rpm
pg_partman_185.2.4el8.x86_64pgdg262.2 KiBpg_partman_18-5.2.4-2PGDG.rhel8.x86_64.rpm
pg_partman_185.4.3el8.aarch64pgdg279.5 KiBpg_partman_18-5.4.3-1PGDG.rhel8.10.aarch64.rpm
pg_partman_185.4.2el8.aarch64pgdg279.0 KiBpg_partman_18-5.4.2-1PGDG.rhel8.10.aarch64.rpm
pg_partman_185.4.1el8.aarch64pgdg278.6 KiBpg_partman_18-5.4.1-1PGDG.rhel8.10.aarch64.rpm
pg_partman_185.4.0el8.aarch64pgdg275.3 KiBpg_partman_18-5.4.0-1PGDG.rhel8.10.aarch64.rpm
pg_partman_185.3.1el8.aarch64pgdg271.2 KiBpg_partman_18-5.3.1-1PGDG.rhel8.aarch64.rpm
pg_partman_185.3.0el8.aarch64pgdg270.3 KiBpg_partman_18-5.3.0-1PGDG.rhel8.aarch64.rpm
pg_partman_185.2.4el8.aarch64pgdg262.2 KiBpg_partman_18-5.2.4-2PGDG.rhel8.aarch64.rpm
pg_partman_185.4.3el9.x86_64pgdg218.6 KiBpg_partman_18-5.4.3-1PGDG.rhel9.7.x86_64.rpm
pg_partman_185.4.2el9.x86_64pgdg218.1 KiBpg_partman_18-5.4.2-1PGDG.rhel9.7.x86_64.rpm
pg_partman_185.4.1el9.x86_64pgdg217.8 KiBpg_partman_18-5.4.1-1PGDG.rhel9.7.x86_64.rpm
pg_partman_185.4.0el9.x86_64pgdg216.1 KiBpg_partman_18-5.4.0-1PGDG.rhel9.7.x86_64.rpm
pg_partman_185.3.1el9.x86_64pgdg213.6 KiBpg_partman_18-5.3.1-1PGDG.rhel9.x86_64.rpm
pg_partman_185.3.0el9.x86_64pgdg213.0 KiBpg_partman_18-5.3.0-1PGDG.rhel9.x86_64.rpm
pg_partman_185.2.4el9.x86_64pgdg208.0 KiBpg_partman_18-5.2.4-2PGDG.rhel9.x86_64.rpm
pg_partman_185.4.3el9.aarch64pgdg218.6 KiBpg_partman_18-5.4.3-1PGDG.rhel9.7.aarch64.rpm
pg_partman_185.4.2el9.aarch64pgdg218.0 KiBpg_partman_18-5.4.2-1PGDG.rhel9.7.aarch64.rpm
pg_partman_185.4.1el9.aarch64pgdg217.7 KiBpg_partman_18-5.4.1-1PGDG.rhel9.7.aarch64.rpm
pg_partman_185.4.0el9.aarch64pgdg216.2 KiBpg_partman_18-5.4.0-1PGDG.rhel9.7.aarch64.rpm
pg_partman_185.3.1el9.aarch64pgdg213.1 KiBpg_partman_18-5.3.1-1PGDG.rhel9.aarch64.rpm
pg_partman_185.3.0el9.aarch64pgdg212.5 KiBpg_partman_18-5.3.0-1PGDG.rhel9.aarch64.rpm
pg_partman_185.2.4el9.aarch64pgdg207.6 KiBpg_partman_18-5.2.4-2PGDG.rhel9.aarch64.rpm
pg_partman_185.4.3el10.x86_64pgdg220.8 KiBpg_partman_18-5.4.3-1PGDG.rhel10.1.x86_64.rpm
pg_partman_185.4.2el10.x86_64pgdg220.4 KiBpg_partman_18-5.4.2-1PGDG.rhel10.1.x86_64.rpm
pg_partman_185.4.1el10.x86_64pgdg220.1 KiBpg_partman_18-5.4.1-1PGDG.rhel10.1.x86_64.rpm
pg_partman_185.4.0el10.x86_64pgdg218.5 KiBpg_partman_18-5.4.0-1PGDG.rhel10.1.x86_64.rpm
pg_partman_185.3.1el10.x86_64pgdg216.2 KiBpg_partman_18-5.3.1-1PGDG.rhel10.x86_64.rpm
pg_partman_185.3.0el10.x86_64pgdg215.5 KiBpg_partman_18-5.3.0-1PGDG.rhel10.x86_64.rpm
pg_partman_185.2.4el10.x86_64pgdg210.5 KiBpg_partman_18-5.2.4-2PGDG.rhel10.x86_64.rpm
pg_partman_185.4.3el10.aarch64pgdg220.8 KiBpg_partman_18-5.4.3-1PGDG.rhel10.1.aarch64.rpm
pg_partman_185.4.2el10.aarch64pgdg220.3 KiBpg_partman_18-5.4.2-1PGDG.rhel10.1.aarch64.rpm
pg_partman_185.4.1el10.aarch64pgdg220.0 KiBpg_partman_18-5.4.1-1PGDG.rhel10.1.aarch64.rpm
pg_partman_185.4.0el10.aarch64pgdg218.4 KiBpg_partman_18-5.4.0-1PGDG.rhel10.1.aarch64.rpm
pg_partman_185.3.1el10.aarch64pgdg216.2 KiBpg_partman_18-5.3.1-1PGDG.rhel10.aarch64.rpm
pg_partman_185.3.0el10.aarch64pgdg215.4 KiBpg_partman_18-5.3.0-1PGDG.rhel10.aarch64.rpm
pg_partman_185.2.4el10.aarch64pgdg210.7 KiBpg_partman_18-5.2.4-2PGDG.rhel10.aarch64.rpm
postgresql-18-partman5.4.3d12.x86_64pgdg238.4 KiBpostgresql-18-partman_5.4.3-1.pgdg12+1_amd64.deb
postgresql-18-partman5.4.2d12.x86_64pgdg237.9 KiBpostgresql-18-partman_5.4.2-1.pgdg12+1_amd64.deb
postgresql-18-partman5.4.3d12.aarch64pgdg238.2 KiBpostgresql-18-partman_5.4.3-1.pgdg12+1_arm64.deb
postgresql-18-partman5.4.2d12.aarch64pgdg237.8 KiBpostgresql-18-partman_5.4.2-1.pgdg12+1_arm64.deb
postgresql-18-partman5.4.3d13.x86_64pgdg238.3 KiBpostgresql-18-partman_5.4.3-1.pgdg13+1_amd64.deb
postgresql-18-partman5.4.2d13.x86_64pgdg237.9 KiBpostgresql-18-partman_5.4.2-1.pgdg13+1_amd64.deb
postgresql-18-partman5.4.3d13.aarch64pgdg238.2 KiBpostgresql-18-partman_5.4.3-1.pgdg13+1_arm64.deb
postgresql-18-partman5.4.2d13.aarch64pgdg237.9 KiBpostgresql-18-partman_5.4.2-1.pgdg13+1_arm64.deb
postgresql-18-partman5.4.3u22.x86_64pgdg231.4 KiBpostgresql-18-partman_5.4.3-1.pgdg22.04+1_amd64.deb
postgresql-18-partman5.4.2u22.x86_64pgdg231.2 KiBpostgresql-18-partman_5.4.2-1.pgdg22.04+1_amd64.deb
postgresql-18-partman5.4.3u22.aarch64pgdg230.9 KiBpostgresql-18-partman_5.4.3-1.pgdg22.04+1_arm64.deb
postgresql-18-partman5.4.2u22.aarch64pgdg230.7 KiBpostgresql-18-partman_5.4.2-1.pgdg22.04+1_arm64.deb
postgresql-18-partman5.4.3u24.x86_64pgdg230.6 KiBpostgresql-18-partman_5.4.3-1.pgdg24.04+1_amd64.deb
postgresql-18-partman5.4.2u24.x86_64pgdg230.5 KiBpostgresql-18-partman_5.4.2-1.pgdg24.04+1_amd64.deb
postgresql-18-partman5.4.3u24.aarch64pgdg230.4 KiBpostgresql-18-partman_5.4.3-1.pgdg24.04+1_arm64.deb
postgresql-18-partman5.4.2u24.aarch64pgdg230.2 KiBpostgresql-18-partman_5.4.2-1.pgdg24.04+1_arm64.deb
postgresql-18-partman5.4.3u26.x86_64pgdg230.3 KiBpostgresql-18-partman_5.4.3-1.pgdg26.04+1_amd64.deb
postgresql-18-partman5.4.2u26.x86_64pgdg230.7 KiBpostgresql-18-partman_5.4.2-1.pgdg26.04+1_amd64.deb
postgresql-18-partman5.4.3u26.aarch64pgdg230.0 KiBpostgresql-18-partman_5.4.3-1.pgdg26.04+1_arm64.deb
postgresql-18-partman5.4.2u26.aarch64pgdg230.4 KiBpostgresql-18-partman_5.4.2-1.pgdg26.04+1_arm64.deb

Source

pig build pkg pg_partman;		# build rpm/deb

Install

Make sure PGDG repo available:

pig repo add pgdg -u    # add pgdg repo and update cache

Install this extension with pig:

pig install pg_partman;		# install via package name, for the active PG version

pig install pg_partman -v 18;   # install for PG 18
pig install pg_partman -v 17;   # install for PG 17
pig install pg_partman -v 16;   # install for PG 16
pig install pg_partman -v 15;   # install for PG 15
pig install pg_partman -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION pg_partman CASCADE; -- requires plpgsql

Usage

pg_partman: Extension to manage partitioned tables by time or ID

pg_partman automates creation and management of both time-based and number-based partition sets using PostgreSQL’s native declarative partitioning (v5.0+). It handles adding new partitions and removing old ones per retention policies, with an optional background worker for automatic maintenance.

Create the Extension

CREATE SCHEMA partman;
CREATE EXTENSION pg_partman SCHEMA partman;

Create a Time-Based Partition Set

CREATE TABLE public.measurements (
    id          bigserial,
    created_at  timestamptz NOT NULL DEFAULT now(),
    value       numeric
) PARTITION BY RANGE (created_at);

SELECT partman.create_parent(
    p_parent_table  := 'public.measurements',
    p_control       := 'created_at',
    p_interval      := '1 day'
);

Create a Serial/ID-Based Partition Set

CREATE TABLE public.events (
    id      bigserial,
    data    text
) PARTITION BY RANGE (id);

SELECT partman.create_parent(
    p_parent_table  := 'public.events',
    p_control       := 'id',
    p_interval      := '100000'
);

Run Maintenance

Manually trigger partition maintenance (create new partitions, drop expired ones):

SELECT partman.run_maintenance();

Or for a specific table:

SELECT partman.run_maintenance(p_parent_table := 'public.measurements');

Configure Retention

Update the configuration to set retention policy:

UPDATE partman.part_config
SET    retention = '30 days',
       retention_keep_table = false
WHERE  parent_table = 'public.measurements';

Background Worker

Enable automatic maintenance in postgresql.conf:

shared_preload_libraries = 'pg_partman_bgw'
pg_partman_bgw.interval = 3600          -- run every hour (seconds)
pg_partman_bgw.dbname = 'mydb'

Migrate Existing Data into Partitions

CALL partman.partition_data_proc('public.measurements');

Show Partitions

SELECT * FROM partman.show_partitions('public.measurements');

Undo Partitioning

CALL partman.undo_partition_proc('public.measurements');
Last updated on