Database Partitioning Cheat Sheet
Covers PostgreSQL range, list, and hash partitioning strategies, partition management commands, and when partitioning improves query performance.
2 PagesIntermediateMar 18, 2026
Range Partitioning
Split a table into partitions based on a continuous value range, ideal for time-series data.
sql
-- Declarative range partitioning by date (PostgreSQL 10+)CREATE TABLE orders ( id SERIAL, order_date DATE NOT NULL, customer_id INT, amount NUMERIC) PARTITION BY RANGE (order_date);CREATE TABLE orders_2024_q1 PARTITION OF orders FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');CREATE TABLE orders_2024_q2 PARTITION OF orders FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');-- The planner automatically routes this to orders_2024_q1SELECT * FROM orders WHERE order_date = '2024-02-15';
Hash & List Partitioning
Distribute rows evenly with HASH, or split by discrete categories with LIST.
sql
-- Hash partitioning: evenly distributes rows with no natural rangeCREATE TABLE users ( id INT NOT NULL, email TEXT) PARTITION BY HASH (id);CREATE TABLE users_p0 PARTITION OF users FOR VALUES WITH (MODULUS 4, REMAINDER 0);CREATE TABLE users_p1 PARTITION OF users FOR VALUES WITH (MODULUS 4, REMAINDER 1);-- List partitioning: split by known discrete valuesCREATE TABLE sales ( id SERIAL, region TEXT NOT NULL, amount NUMERIC) PARTITION BY LIST (region);CREATE TABLE sales_us PARTITION OF sales FOR VALUES IN ('US', 'CA');CREATE TABLE sales_eu PARTITION OF sales FOR VALUES IN ('DE', 'FR', 'UK');
Partitioning Strategies
The main ways to split a large table and when to use each.
- Range- Splits rows by a continuous range of values (dates, IDs). Ideal for time-series data and rolling retention windows.
- List- Splits rows by explicit discrete values (region, status, tenant). Best when categories are known ahead of time.
- Hash- Distributes rows evenly across partitions using a hash of the key. Use when there's no natural range/list boundary and you need balanced write load.
- Composite (sub-partitioning)- Combines two strategies, e.g. RANGE by date then HASH by tenant_id, for finer-grained partition pruning.
- Partition pruning- The query planner skips scanning partitions that cannot contain matching rows based on the WHERE clause and partition key.
- Horizontal vs. vertical partitioning- Horizontal partitioning splits rows across tables; vertical partitioning splits columns into separate tables — a distinct technique.
- Sharding vs. partitioning- Partitioning splits data within a single database instance; sharding distributes partitions across multiple database servers/nodes.
Partition Maintenance
Common operations for adding, retiring, and inspecting partitions.
sql
-- Detach a partition without a long-lived table lockALTER TABLE orders DETACH PARTITION orders_2024_q1;-- Attach a new partition for the next quarterALTER TABLE orders ATTACH PARTITION orders_2024_q3 FOR VALUES FROM ('2024-07-01') TO ('2024-10-01');-- Instantly drop old data (no row-by-row DELETE, minimal WAL)DROP TABLE orders_2023_q4;-- Catch-all partition for values that don't match any defined range/listCREATE TABLE orders_default PARTITION OF orders DEFAULT;-- Inspect existing partitions of a tableSELECT relname FROM pg_class WHERE relispartition AND relname LIKE 'orders_%';
Pro Tip
Choose the partition key to match your most selective and most frequent WHERE clause — a partitioning scheme that doesn't align with real query patterns adds maintenance overhead without improving performance, since the planner can't prune partitions it can't rule out.
Was this cheat sheet helpful?
Explore Topics
#DatabasePartitioning#DatabasePartitioningCheatSheet#Database#Intermediate#RangePartitioning#HashListPartitioning#PartitioningStrategies#PartitionMaintenance#DataStructures#Databases#CheatSheet#SkillVeris
Advertisement
Sri Hayavadhana Info-Tech
Professional Web Designing Services
- Responsive Websites
- E-commerce Solutions
- SEO Friendly Design
- Fast & Secure
- Support & Maintenance