このエントリを読むと分かること
もう全部 psql でいいんじゃないかな。
PostgreSQL 10 のパーティションテーブルについて pgAdmin 4 を使った作り方の流れが分かる。
パーティションテーブルとはどんなものか、については触れないので
「町田は神奈川」タグのエントリ などを参考にしてほしい。
経緯
「pgAdmin 4 でパーティションテーブルを作ってみよう」と思ったものの、
- pgAdmin のマニュアルページで「partition」を検索 してもそれっぽいページがヒットしない。
- そもそも テーブル作成用画面 の画像が古い。
-
General
タブ にPartitioned Table?
項目がない。 -
Partition
タブがない。
-
という状況(2017.12.20現在)。
なので自分で探り探りやった結果をメモすることにした。
経緯がこんな感じなので「その辺の手順はココにあるよ」というのがあれば指摘してもらえると嬉しい。
環境
- Windows 7 64bit
- PostgreSQL 10.1
- https://www.postgresql.jp/download からダウンロードしたインストーラでインストール。
- インストール時の設定はロケールを(とりあえず)
C
にした。それ以外はデフォルト。
- pgAdmin 4
- PostgreSQL インストール時に一緒にインストール。
作成するテーブルの構成
親テーブルと子テーブル
- 親テーブル
player
- 子テーブル
player1
player2
player3
カラム定義
# | カラム名 | 型 |
---|---|---|
1 | player_id |
integer |
2 | name |
text |
パーティションキーには player_id
を使用する。
パーティションキー値と子テーブルの対応
# | パーティションキー値(player_id ) |
子テーブル |
---|---|---|
1 | 1 |
player1 |
2 | 2 |
player2 |
3 | 3 |
player3 |
データの性質を考えると全く意味のないパーティショニングだが、
気にしたいのはデータ構造ではないのでそこは割り切る。
準備
- pgAdmin 4 を起動する。
- 適当な DB を作成する。作成が面倒なら
postgres
で。- 今回は
mydb
を作成した。
- 今回は
テーブルの作成
テーブル作成用のダイアログでパーティションテーブルに必要な設定をし、
設定を確定したら親テーブルと子テーブルが作成される、というのが主な流れ。
- 画面左の
Browser
ペインからServers
-PostgreSQL 10
-Databases
-mydb
-Schemas
-public
-Tables
を選択する。 - 右クリックして
Create
-Table...
を選択する。- テーブルダイアログが開く。タイトルバーの表示は
Create - Table
。
- テーブルダイアログが開く。タイトルバーの表示は
- テーブルダイアログの各タブで必要事項を入力する(デフォルトでよい項目は省略)。
-
General
タブ-
Name
:player
-
Partitioned Table?
:Yes
- この項目を
No
からYes
に変更するとPlease specify at least one key for partitioned table.
(パーティションテーブル用にキーを指定してね) という警告が表示される。
Partition
タブで設定するので放置でよい。
- この項目を
-
-
Columns
タブ-
Name
:player_id
、Data type
:integer
を追加する。- 親テーブルには主キーを設定できないため、
Primary key?
は無効になっている。
- 親テーブルには主キーを設定できないため、
-
Name
:name
、Data type
:text
を追加する。
-
-
Partition
タブ-
Partition Type
:List
-
Range
も選択できる。今回はList
にする。
-
-
Partition Keys
-
Key type
:Columns
、Columns
:player_id
を追加する。
-
-
Partions
-
Name
:player1
、In
:1
を追加する。 -
Name
:player2
、In
:2
を追加する。 -
Name
:player3
、In
:3
を追加する。
-
-
-
-
SQL
タブを見て「こんな SQL文(※1) が実行されるんだ。へー」と思う。 -
Save
ボタンをクリックする。 -
Browser
ペインでTables
にplayer
が追加されているのを確認する。- 子テーブルは
player
-Partitions
から確認できる。
- 子テーブルは
※1 SQLタブの表示
パーティションテーブル作成用のSQL文
CREATE TABLE public.player
(
player_id integer,
name text
) PARTITION BY LIST (player_id)
WITH (
OIDS = FALSE
);
ALTER TABLE public.player
OWNER to postgres;
CREATE TABLE public.player1 PARTITION OF public.player
FOR VALUES IN (1);
CREATE TABLE public.player2 PARTITION OF public.player
FOR VALUES IN (2);
CREATE TABLE public.player3 PARTITION OF public.player
FOR VALUES IN (3);
おわり。
おまけ:レコードの登録と確認
レコードが期待通りに登録されるか確認する。
レコードを登録する
-
Browser
ペインでTables
-player
を選択する。 - 右クリックして
Scripts
-INSERT script
を選択する。- 右ペインに
INSERT
文のテンプレートが表示される。
- 右ペインに
-
INSERT
文を編集して実行する。INSERT INTO public.player(player_id, name) VALUES (1, 'tarou'), (2, 'jirou'), (3, 'saburou');
- 実行は稲妻のアイコンで。もしくは
F5
キー。
親テーブルを確認する
-
Browser
ペインでTables
-player
を選択する。 - 右クリックして
View/Edit Data
-All Rows
を選択する。- 右ペインに登録したレコード 3件が表示されれば OK 。
子テーブルを確認する
-
Browser
ペインでTables
-player
-Partitions
-player1
を選択する。 - 右クリックして
View/Edit Data
-All Rows
を選択する。- 右ペインに
player_id = 1, name = 'tarou'
のレコードが表示されれば OK 。
- 右ペインに
-
player2
とplayer3
も同様に確認する。