Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is a partitioned table in PostgreSQL?
A partitioned table is a special table that is divided into smaller pieces called partitions. Each partition holds a subset of the data based on a rule, making it easier to manage and query large datasets.
Click to reveal answer
intermediate
How do you create a partitioned table by range in PostgreSQL?
Use CREATE TABLE with PARTITION BY RANGE (column_name). Then create partitions with specific ranges using FOR VALUES FROM ... TO ....
Click to reveal answer
intermediate
What is the difference between list and range partitioning?
Range partitioning divides data based on continuous ranges of values (like dates). List partitioning divides data based on specific discrete values (like categories or states).
Click to reveal answer
beginner
Can you insert data directly into a partitioned table in PostgreSQL?
Yes, you insert data into the main partitioned table. PostgreSQL automatically routes the data to the correct partition based on the partitioning rules.
Click to reveal answer
beginner
Why use partitioned tables in a database?
Partitioned tables improve performance by limiting the amount of data scanned during queries. They also make maintenance tasks like backups and deletes faster by working on smaller partitions.
Click to reveal answer
Which SQL clause is used to define a partitioned table by range in PostgreSQL?
APARTITION BY RANGE (column_name)
BPARTITION BY LIST (column_name)
CPARTITION BY HASH (column_name)
DPARTITION BY COLUMN (column_name)
✗ Incorrect
The correct syntax to create a range partitioned table uses PARTITION BY RANGE followed by the column name.
What happens when you insert a row into a partitioned table?
AThe row is stored in the main table only.
BThe row is rejected if it doesn't match a partition.
CYou must specify the partition manually.
DPostgreSQL routes the row to the correct partition automatically.
✗ Incorrect
PostgreSQL automatically routes inserted rows to the correct partition based on the partitioning rules.
Which partitioning method divides data by specific values like categories?
ARange partitioning
BHash partitioning
CList partitioning
DInterval partitioning
✗ Incorrect
List partitioning divides data by specific discrete values such as categories or states.
What is a key benefit of using partitioned tables?
AThey reduce the size of the database.
BThey improve query performance by scanning fewer rows.
CThey automatically create indexes.
DThey eliminate the need for backups.
✗ Incorrect
Partitioned tables improve query performance by limiting the data scanned to relevant partitions.
How do you create a partition for a range partitioned table?
ACREATE TABLE ... PARTITION OF ... FOR VALUES FROM ... TO ...
BCREATE PARTITION FOR VALUES IN (...)
CALTER TABLE ADD PARTITION ...
DCREATE PARTITION BY RANGE (...)
✗ Incorrect
Partitions are created with CREATE TABLE ... PARTITION OF ... FOR VALUES FROM ... TO ... for range partitioning.
Explain how to create a partitioned table by range in PostgreSQL and how to add partitions.
Think about the main table and its child partitions with specific ranges.
You got /4 concepts.
Describe the benefits of using partitioned tables and how data insertion works with them.
Consider why splitting data helps and what happens when you add new rows.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of creating partitioned tables in PostgreSQL?
easy
A. To split a large table into smaller, manageable parts based on a column
B. To create multiple copies of the same table for backup
C. To combine several tables into one large table
D. To encrypt the data in a table for security
Solution
Step 1: Understand partitioning concept
Partitioned tables divide a big table into smaller parts based on a column value, improving management and query performance.
Step 2: Compare options
Backup, merging several tables, and encryption are not related to partitioning.
Final Answer:
To split a large table into smaller, manageable parts based on a column -> Option A
Quick Check:
Partitioned tables split big tables = A [OK]
Hint: Partitioning means splitting big tables by column values [OK]
Common Mistakes:
Confusing partitioning with backup or encryption
Thinking partitioning merges tables instead of splitting
Assuming partitioning duplicates data
2. Which of the following is the correct syntax to create a partitioned table by range on column created_date?
easy
A. CREATE TABLE orders PARTITION BY LIST (created_date);
B. CREATE TABLE orders PARTITION ON RANGE (created_date);
C. CREATE TABLE orders PARTITION BY HASH (created_date);
D. CREATE TABLE orders PARTITION BY RANGE (created_date);
Solution
Step 1: Recall partition syntax
PostgreSQL uses PARTITION BY RANGE (column) to create range partitions.
Step 2: Check options
CREATE TABLE orders PARTITION BY RANGE (created_date); uses correct syntax. CREATE TABLE orders PARTITION ON RANGE (created_date); uses wrong keyword 'PARTITION ON'. PARTITION BY LIST and PARTITION BY HASH use different partition types.
Final Answer:
CREATE TABLE orders PARTITION BY RANGE (created_date); -> Option D
Quick Check:
Correct syntax uses PARTITION BY RANGE [OK]
Hint: Use PARTITION BY RANGE (column) for range partitions [OK]
Common Mistakes:
Using PARTITION ON instead of PARTITION BY
Mixing partition types (LIST or HASH) when RANGE is needed
Omitting parentheses around column name
3. Given the following commands, what will be the result of querying SELECT * FROM sales WHERE sale_year = 2023;?
CREATE TABLE sales (
id INT,
sale_year INT,
amount NUMERIC
) PARTITION BY LIST (sale_year);
CREATE TABLE sales_2022 PARTITION OF sales FOR VALUES IN (2022);
CREATE TABLE sales_2023 PARTITION OF sales FOR VALUES IN (2023);
INSERT INTO sales VALUES (1, 2022, 100), (2, 2023, 200), (3, 2023, 300);
medium
A. Rows with id 2 and 3 will be returned
B. Rows with id 1 and 2 will be returned
C. Only row with id 1 will be returned
D. No rows will be returned
Solution
Step 1: Understand partitioning by LIST on sale_year
Table sales is partitioned by sale_year with partitions for 2022 and 2023.
Step 2: Analyze inserted data and query
Rows with sale_year 2023 have ids 2 and 3. Query filters sale_year = 2023, so these rows are returned.
4. Identify the error in the following partition creation commands:
CREATE TABLE logs (
id SERIAL,
log_date DATE
) PARTITION BY RANGE (log_date);
CREATE TABLE logs_2023 PARTITION OF logs FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');
medium
A. Partitioning by RANGE is not allowed on DATE columns
B. Missing PRIMARY KEY on the parent table
C. The TO value should be '2024-01-01' to include all 2023 dates
D. FOR VALUES clause should use LIST instead of RANGE
Solution
Step 1: Check RANGE partition boundaries
RANGE partitions include values from FROM (inclusive) up to TO (exclusive). To cover all 2023 dates, TO must be '2024-01-01'.
Step 2: Analyze given TO value
TO is '2023-12-31', which excludes that date and any after. This causes missing data for 2023-12-31.
Final Answer:
The TO value should be '2024-01-01' to include all 2023 dates -> Option C
Quick Check:
RANGE TO is exclusive, so use next day [OK]
Hint: RANGE TO value is exclusive; use next day after range end [OK]
Common Mistakes:
Using inclusive TO value in RANGE partitions
Thinking RANGE partitioning disallows DATE columns
Confusing LIST and RANGE partition syntax
5. You want to create a partitioned table events partitioned by HASH on user_id with 4 partitions. Which set of commands correctly creates the table and its partitions?
hard
A. CREATE TABLE events (id INT, user_id INT) PARTITION BY HASH (user_id);
CREATE TABLE events_p0 PARTITION OF events FOR VALUES IN (0);
CREATE TABLE events_p1 PARTITION OF events FOR VALUES IN (1);
CREATE TABLE events_p2 PARTITION OF events FOR VALUES IN (2);
CREATE TABLE events_p3 PARTITION OF events FOR VALUES IN (3);
B. CREATE TABLE events (id INT, user_id INT) PARTITION BY HASH (user_id);
CREATE TABLE events_p0 PARTITION OF events FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE events_p1 PARTITION OF events FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE events_p2 PARTITION OF events FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE events_p3 PARTITION OF events FOR VALUES WITH (MODULUS 4, REMAINDER 3);
C. CREATE TABLE events (id INT, user_id INT) PARTITION BY LIST (user_id);
CREATE TABLE events_p0 PARTITION OF events FOR VALUES IN (0);
CREATE TABLE events_p1 PARTITION OF events FOR VALUES IN (1);
CREATE TABLE events_p2 PARTITION OF events FOR VALUES IN (2);
CREATE TABLE events_p3 PARTITION OF events FOR VALUES IN (3);
D. CREATE TABLE events (id INT, user_id INT) PARTITION BY RANGE (user_id);
CREATE TABLE events_p0 PARTITION OF events FOR VALUES FROM (0) TO (1);
CREATE TABLE events_p1 PARTITION OF events FOR VALUES FROM (1) TO (2);
CREATE TABLE events_p2 PARTITION OF events FOR VALUES FROM (2) TO (3);
CREATE TABLE events_p3 PARTITION OF events FOR VALUES FROM (3) TO (4);
Solution
Step 1: Understand HASH partition syntax
HASH partitions require FOR VALUES WITH (MODULUS n, REMAINDER r) to define partitions.
Step 2: Check each option
CREATE TABLE events (id INT, user_id INT) PARTITION BY HASH (user_id);
CREATE TABLE events_p0 PARTITION OF events FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE events_p1 PARTITION OF events FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE events_p2 PARTITION OF events FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE events_p3 PARTITION OF events FOR VALUES WITH (MODULUS 4, REMAINDER 3); correctly uses HASH partitioning with modulus 4 and remainders 0 to 3. CREATE TABLE events (id INT, user_id INT) PARTITION BY HASH (user_id);
CREATE TABLE events_p0 PARTITION OF events FOR VALUES IN (0);
CREATE TABLE events_p1 PARTITION OF events FOR VALUES IN (1);
CREATE TABLE events_p2 PARTITION OF events FOR VALUES IN (2);
CREATE TABLE events_p3 PARTITION OF events FOR VALUES IN (3); uses LIST syntax incorrectly. CREATE TABLE events (id INT, user_id INT) PARTITION BY LIST (user_id);
CREATE TABLE events_p0 PARTITION OF events FOR VALUES IN (0);
CREATE TABLE events_p1 PARTITION OF events FOR VALUES IN (1);
CREATE TABLE events_p2 PARTITION OF events FOR VALUES IN (2);
CREATE TABLE events_p3 PARTITION OF events FOR VALUES IN (3); uses LIST partitioning, not HASH. CREATE TABLE events (id INT, user_id INT) PARTITION BY RANGE (user_id);
CREATE TABLE events_p0 PARTITION OF events FOR VALUES FROM (0) TO (1);
CREATE TABLE events_p1 PARTITION OF events FOR VALUES FROM (1) TO (2);
CREATE TABLE events_p2 PARTITION OF events FOR VALUES FROM (2) TO (3);
CREATE TABLE events_p3 PARTITION OF events FOR VALUES FROM (3) TO (4); uses RANGE partitioning, not HASH.
Final Answer:
The commands using PARTITION BY HASH (user_id) with FOR VALUES WITH (MODULUS 4, REMAINDER 0-3) -> Option B
Quick Check:
HASH partitions use MODULUS and REMAINDER [OK]
Hint: HASH partitions use MODULUS and REMAINDER in FOR VALUES WITH clause [OK]
Common Mistakes:
Using FOR VALUES IN instead of FOR VALUES WITH for HASH