0
0
PostgreSQLquery~10 mins

Sub-partitioning in PostgreSQL - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Sub-partitioning
Create main partitioned table
Define first-level partitions
Define sub-partitions inside each partition
Insert data
Data routed to correct sub-partition
Query data from main table
PostgreSQL fetches from relevant sub-partition
Sub-partitioning splits data first by main partitions, then further divides each partition into sub-partitions for better organization and query performance.
Execution Sample
PostgreSQL
CREATE TABLE sales (
  id INT,
  region TEXT,
  month INT
) PARTITION BY LIST (region);

CREATE TABLE sales_us PARTITION OF sales FOR VALUES IN ('US') PARTITION BY RANGE (month);

CREATE TABLE sales_us_jan PARTITION OF sales_us FOR VALUES FROM (1) TO (2);
This code creates a main table partitioned by region, then sub-partitions the US region by month ranges.
Execution Table
StepActionInput/ConditionResult/Output
1Create main table 'sales' partitioned by regionN/ATable 'sales' created with LIST partitioning on 'region'
2Create partition 'sales_us' for region 'US'FOR VALUES IN ('US')Partition 'sales_us' created, sub-partitioned by RANGE on 'month'
3Create sub-partition 'sales_us_jan' for JanuaryFOR VALUES FROM (1) TO (2)Sub-partition 'sales_us_jan' created for month=1
4Insert row (1, 'US', 1)region='US', month=1Row routed to 'sales_us_jan' sub-partition
5Insert row (2, 'US', 3)region='US', month=3Row routed to 'sales_us' partition but no matching sub-partition, error or rejection
6Query SELECT * FROM sales WHERE region='US' AND month=1region='US', month=1Data fetched from 'sales_us_jan' sub-partition
7Query SELECT * FROM sales WHERE region='EU'region='EU'No matching partition, returns empty or error
💡 Execution stops after all partitions and sub-partitions are created and data is routed accordingly.
Variable Tracker
VariableStartAfter Step 4After Step 5Final
Table 'sales'EmptyContains 1 row in 'sales_us_jan'Error or no row for month=3Contains 1 row in 'sales_us_jan'
Partition 'sales_us_jan'EmptyContains 1 rowNo changeContains 1 row
Partition 'sales_us'EmptyContains 1 row in sub-partitionNo matching sub-partition for month=3Contains 1 row in sub-partition
Key Moments - 2 Insights
Why does the row with month=3 cause an error or no insertion in step 5?
Because there is no sub-partition defined for month=3 inside 'sales_us', so PostgreSQL cannot route the row to a sub-partition, causing an error or rejection as shown in execution_table step 5.
How does PostgreSQL decide which sub-partition to put a row in?
PostgreSQL first checks the main partition key (region), then within that partition it uses the sub-partition key (month) to route the row to the correct sub-partition, as seen in step 4 routing to 'sales_us_jan'.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 4. Where is the row with region='US' and month=1 stored?
AIn the main table 'sales' directly
BIn the sub-partition 'sales_us_jan'
CIn the partition 'sales_us' but not in any sub-partition
DIt causes an error and is not stored
💡 Hint
Refer to execution_table row 4 showing routing to 'sales_us_jan' sub-partition
At which step does PostgreSQL create the sub-partition for January?
AStep 3
BStep 1
CStep 2
DStep 4
💡 Hint
Check execution_table row 3 where 'sales_us_jan' is created for month=1
If you insert a row with region='US' and month=5, what will happen according to the execution flow?
AIt will be stored in 'sales_us_jan' sub-partition
BIt will be stored in 'sales_us' partition without sub-partition
CIt will cause an error due to missing sub-partition
DIt will be stored in the main 'sales' table
💡 Hint
Refer to execution_table step 5 where missing sub-partition causes error
Concept Snapshot
Sub-partitioning splits a main partitioned table into smaller parts.
Syntax: PARTITION BY ... then PARTITION BY ... inside partitions.
Data is routed first by main partition key, then by sub-partition key.
Missing sub-partitions cause insert errors.
Improves query speed by narrowing data access.
Full Transcript
Sub-partitioning in PostgreSQL means dividing a partitioned table further into smaller partitions called sub-partitions. First, you create a main table partitioned by one column, like region. Then, inside each partition, you define sub-partitions by another column, like month. When inserting data, PostgreSQL routes rows first to the main partition based on the first key, then to the correct sub-partition based on the second key. If a sub-partition does not exist for a value, insertion fails. Queries on the main table fetch data from the relevant sub-partitions, improving performance by scanning less data.