0Pricing
Advanced PostgreSQL: Indexing, Partitioning, Replication · レッスン

リストパーティショニングの実装

カラム内の特定の離散値に基づいてデータを分割する、リストパーティショニングの設定方法を理解します。

「リストパーティショニングの実装」はCoddyKit上の無料Advanced PostgreSQL: Indexing, Partitioning, Replicationレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAdvanced PostgreSQL: Indexing, Partitioning, Replication学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Advanced PostgreSQL: Indexing, Partitioning, Replicationコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

What is List Partitioning?

Welcome! In this lesson, we'll dive into List Partitioning, a powerful way to organize your data in PostgreSQL.

List partitioning divides a table based on discrete values in a specified column. Think of it as categorizing your data into distinct groups.

List vs. Range: A Quick Look

You might recall Range Partitioning from a previous lesson, which divides data based on a *range* of values (e.g., dates, IDs).

List partitioning is different: it uses specific, distinct values. For example, you could partition by country_code ('US', 'CA', 'MX') or order_status ('PENDING', 'SHIPPED', 'CANCELLED').

Choosing Your Partition Key

The column you choose to partition by is called the partition key. For list partitioning, this column should have a finite and manageable set of distinct values.

  • Good candidates: Country codes, product categories, order statuses.
  • Poor candidates: Timestamps, large text fields, unique IDs (too many distinct values).

Setting Up the Parent Table

First, we create the main table, known as the parent table. We specify PARTITION BY LIST and indicate the column that will serve as our partition key.

Let's create a sales table partitioned by country_code:

CREATE TABLE sales (
    sale_id SERIAL,
    product_id INT,
    country_code CHAR(2),
    amount NUMERIC(10, 2),
    sale_date DATE
) PARTITION BY LIST (country_code);

Defining Your Partitions

Once the parent table is ready, we create individual child partitions. Each child partition is a separate table that stores rows for specific values of the partition key.

Here, we create partitions for sales in the 'US' and 'CA':

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

CREATE TABLE sales_ca PARTITION OF sales
FOR VALUES IN ('CA');

Data Insertion in Action

When you insert data into the parent sales table, PostgreSQL automatically directs each row to the correct child partition based on its country_code value.

Let's add some sales data and then check the individual partitions:

INSERT INTO sales (product_id, country_code, amount, sale_date) VALUES
(101, 'US', 150.75, '2023-01-05'),
(102, 'CA', 200.00, '2023-01-06'),
(103, 'US', 75.20, '2023-01-07');

SELECT * FROM sales_us;
SELECT * FROM sales_ca;

Inspecting Your Partitions

It's good practice to verify that your partitions are correctly linked to the parent table. You can query PostgreSQL's catalog tables to see the inheritance structure.

This query lists child tables for 'sales':

SELECT relnamespace::regnamespace AS parent_schema,
       relname AS parent_table,
       c.relname AS child_table
FROM pg_class p
JOIN pg_inherits i ON p.oid = i.inhparent
JOIN pg_class c ON i.inhrelid = c.oid
WHERE p.relname = 'sales';

Expanding Your Partition Scheme

As your business expands or new data categories emerge, you can easily add new partitions to your existing scheme without downtime.

Let's add a partition for Mexico ('MX') sales and insert some data:

CREATE TABLE sales_mx PARTITION OF sales
FOR VALUES IN ('MX');

INSERT INTO sales (product_id, country_code, amount, sale_date) VALUES
(104, 'MX', 120.50, '2023-01-08');

SELECT * FROM sales_mx;

Handling Unknown Values with DEFAULT

What happens if you insert a country_code that isn't explicitly covered by a partition (e.g., 'GB')?

You can create a default partition to catch all values that don't match any other defined list. This prevents errors for unexpected data.

CREATE TABLE sales_default PARTITION OF sales
DEFAULT;

INSERT INTO sales (product_id, country_code, amount, sale_date) VALUES
(105, 'GB', 99.99, '2023-01-09');

SELECT * FROM sales_default;

List Partitioning Quiz

Consider a table orders partitioned by list on the status column, which can be 'NEW', 'PROCESSING', 'SHIPPED', or 'CANCELLED'.

List Partitioning Summary

We've covered how to implement list partitioning in PostgreSQL. You learned to:

  • Define a parent table with PARTITION BY LIST.
  • Create child partitions using FOR VALUES IN.
  • Route data automatically upon insertion.
  • Add new partitions and handle unspecified values with a DEFAULT partition.

List partitioning is ideal for data with discrete, categorical values, helping organize and query your data more efficiently.

よくある質問

「リストパーティショニングの実装」レッスンは無料ですか?

はい。「リストパーティショニングの実装」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Advanced PostgreSQL: Indexing, Partitioning, Replicationコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Advanced PostgreSQL: Indexing, Partitioning, Replicationコースには全4レッスンが含まれています。

「リストパーティショニングの実装」で何を学びますか?

カラム内の特定の離散値に基づいてデータを分割する、リストパーティショニングの設定方法を理解します。 ブラウザで直接実行するハンズオンコードでAdvanced PostgreSQL: Indexing, Partitioning, Replicationを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Advanced PostgreSQL: Indexing, Partitioning, Replicationを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAdvanced PostgreSQL: Indexing, Partitioning, Replicationは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「リストパーティショニングの実装」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAdvanced PostgreSQL: Indexing, Partitioning, Replicationレッスンでコードを書いて実行できますか?

はい。すべてのAdvanced PostgreSQL: Indexing, Partitioning, Replicationレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. パーティショニングの利点
  2. 範囲パーティショニングの設定
  3. リストパーティショニングの実装
  4. ハッシュパーティショニングの実装
← Advanced PostgreSQL: Indexing, Partitioning, Replicationに戻る