1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pgAdmin 4 でパーティションテーブルを作成する

Last updated at Posted at 2017-12-20

このエントリを読むと分かること

もう全部 psql でいいんじゃないかな。
PostgreSQL 10 のパーティションテーブルについて pgAdmin 4 を使った作り方の流れが分かる。

パーティションテーブルとはどんなものか、については触れないので
「町田は神奈川」タグのエントリ などを参考にしてほしい。

経緯

「pgAdmin 4 でパーティションテーブルを作ってみよう」と思ったものの、

という状況(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

データの性質を考えると全く意味のないパーティショニングだが、
気にしたいのはデータ構造ではないのでそこは割り切る。

準備

  1. pgAdmin 4 を起動する。
  2. 適当な DB を作成する。作成が面倒なら postgres で。
    • 今回は mydb を作成した。

テーブルの作成

テーブル作成用のダイアログでパーティションテーブルに必要な設定をし、
設定を確定したら親テーブルと子テーブルが作成される、というのが主な流れ。

  1. 画面左の Browser ペインから Servers - PostgreSQL 10 - Databases - mydb - Schemas - public - Tables を選択する。
  2. 右クリックして Create - Table... を選択する。
    • テーブルダイアログが開く。タイトルバーの表示は Create - Table
  3. テーブルダイアログの各タブで必要事項を入力する(デフォルトでよい項目は省略)。
    • General タブ
      • Name: player
      • Partitioned Table?: Yes
        • この項目を No から Yes に変更すると Please specify at least one key for partitioned table.(パーティションテーブル用にキーを指定してね) という警告が表示される。
          Partition タブで設定するので放置でよい。
    • Columns タブ
      1. Name: player_idData type: integer を追加する。
        • 親テーブルには主キーを設定できないため、Primary key? は無効になっている。
      2. Name: nameData type: text を追加する。
    • Partition タブ
      • Partition Type: List
        • Range も選択できる。今回は List にする。
      • Partition Keys
        1. Key type: ColumnsColumns: player_id を追加する。
      • Partions
        1. Name: player1In: 1 を追加する。
        2. Name: player2In: 2 を追加する。
        3. Name: player3In: 3 を追加する。
  4. SQL タブを見て「こんな SQL文(※1) が実行されるんだ。へー」と思う。
  5. Save ボタンをクリックする。
  6. Browser ペインで Tablesplayer が追加されているのを確認する。
    • 子テーブルは 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);

おわり。

おまけ:レコードの登録と確認

レコードが期待通りに登録されるか確認する。

レコードを登録する

  1. Browser ペインで Tables - player を選択する。
  2. 右クリックして Scripts - INSERT script を選択する。
    • 右ペインに INSERT 文のテンプレートが表示される。
  3. INSERT 文を編集して実行する。
    • INSERT INTO public.player(player_id, name) VALUES (1, 'tarou'), (2, 'jirou'), (3, 'saburou');
    • 実行は稲妻のアイコンで。もしくは F5 キー。

親テーブルを確認する

  1. Browser ペインで Tables - player を選択する。
  2. 右クリックして View/Edit Data - All Rows を選択する。
    • 右ペインに登録したレコード 3件が表示されれば OK 。

子テーブルを確認する

  1. Browser ペインで Tables - player - Partitions - player1 を選択する。
  2. 右クリックして View/Edit Data - All Rows を選択する。
    • 右ペインに player_id = 1, name = 'tarou' のレコードが表示されれば OK 。
  3. player2player3 も同様に確認する。
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?