このエントリを読むと分かること
もう全部 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
- 子テーブル
player1player2player3
カラム定義
| # | カラム名 | 型 |
|---|---|---|
| 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も同様に確認する。