宣言的パーティショニング(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:の行に、各パーティションの名前と範囲条件がそのまま表示される。パーティション数が多いテーブルでどの範囲がどのパーティションに対応するか調べる際に使う。

参考