宣言的パーティショニング(PARTITION BY)で作成したテーブルの一覧を確認するには、psqlコマンドラインツールの\dPコマンドを使う。ここでは日付範囲でパーティション分割したテーブルを例にする。
testdb=# CREATE TABLE events (id int, logdate date NOT NULL) PARTITION BY RANGE (logdate);
testdb=# CREATE TABLE events_2026 PARTITION OF events
testdb-# FOR VALUES FROM ('2026-01-01') TO ('2027-01-01');
\dPコマンドでパーティション親テーブル一覧を確認する
testdb=# \dP
List of partitioned relations
Schema | Name | Owner | Type | Table
--------+--------+-------+-------------------+-------
public | events | postgres | partitioned table |
(1 row)
\dPは各パーティション分割の「親」となるテーブル(またはインデックス)だけを表示し、個々のパーティション(events_2026)自体は表示しない。個々のパーティションは通常のテーブルとして扱われるため、\dtで確認できる。
testdb=# \dt events*
List of relations
Schema | Name | Type | Owner
--------+-------------+-------------------+-------
public | events | partitioned table | postgres
public | events_2026 | table | postgres
(2 rows)
参考: 【PostgreSQL】SQLでテーブル一覧を取得する
\dPtと\dPiでテーブルとインデックスを分けて確認する
\dPはパーティション化されたテーブルとインデックスの両方をまとめて表示する。テーブルだけに絞り込みたい場合は\dPt、インデックスだけに絞り込みたい場合は\dPiを使う。
testdb=# \dPt
List of partitioned tables
Schema | Name | Owner
--------+--------+-------
public | events | postgres
(1 row)
インデックスをまだ作成していない時点では\dPiは空になる。
testdb=# \dPi
List of partitioned indexes
Schema | Name | Owner | Table
--------+------+-------+-------
(0 rows)
パーティション化されたテーブルへインデックスを作成すると、各パーティションにも自動的に対応するインデックスが作られ、\dPiで表示されるようになる。
testdb=# CREATE INDEX events_logdate_idx ON events (logdate);
testdb=# \dPi
List of partitioned indexes
Schema | Name | Owner | Table
--------+--------------------+-------+--------
public | events_logdate_idx | postgres | events
(1 row)
\dP+でサイズも表示する
+を付けると各パーティション親テーブルの合計サイズが表示される。
testdb=# \dP+
List of partitioned relations
Schema | Name | Owner | Type | Table | Total size | Description
--------+--------------------+-------+-------------------+--------+------------+-------------
public | events | postgres | partitioned table | | 0 bytes |
public | events_logdate_idx | postgres | partitioned index | events | 8192 bytes |
(2 rows)
\dP+はテーブルとインデックスの両方をまとめて表示し、Total sizeには配下の全パーティションを合算したサイズが表示される。テーブル部分のeventsはまだデータが入っていないため0 bytesのままだが、直前に作成したインデックスevents_logdate_idxは各パーティションのインデックス実体分のサイズを持つ。
\dまたは\d+でパーティション構成を詳しく確認する
\dに親テーブル名を指定すると、パーティションキーと実際のパーティション一覧が表示される。
testdb=# \d events
Partitioned table "public.events"
Column | Type | Collation | Nullable | Default
---------+---------+-----------+----------+---------
id | integer | | |
logdate | date | | not null |
Partition key: RANGE (logdate)
Indexes:
"events_logdate_idx" btree (logdate)
Number of partitions: 1 (Use \d+ to list them.)
\d+にするとパーティション一覧とインデックスの詳細まで表示される。
testdb=# \d+ events
Partitioned table "public.events"
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
---------+---------+-----------+----------+---------+---------+-------------+--------------+-------------
id | integer | | | | plain | | |
logdate | date | | not null | | plain | | |
Partition key: RANGE (logdate)
Indexes:
"events_logdate_idx" btree (logdate)
Partitions: events_2026 FOR VALUES FROM ('2026-01-01') TO ('2027-01-01')
Partitions:の行に、各パーティションの名前と範囲条件がそのまま表示される。パーティション数が多いテーブルでどの範囲がどのパーティションに対応するか調べる際に使う。
