# PostgresForest v4.0 環境構築ツール リファレンス

目次

# 1 環境構築ツールとは

環境構築ツールとは、 PostgresForestのに対して次のような操作 （主にメンテナンスのための操作）を行うツールです。

> - PostgresForestを構成するサーバの追加・削除・ステータス閲覧
> - PostgresForestコンフィグレーションの追加・閲覧・削除
> - データベース・テーブル・インデックス等の作成・削除・各種設定変更
> - グローバルシステムカタログ [*]. の新規作成・追加・削除・整合性チェック

[*] | グローバルシステムカタログとは、PostgresForest環境のメタ情報を保持するデータベースです。 実体はPostgreSQLのデータベースとして作成します。

# 2 環境構築ツールの基本操作

環境構築ツール `forestadm` を使用することで、 PostgresForestのグローバルシステムカタログに接続し、 対話的にPostgresForest全体の設定やユーザデータベースの設定等を行うことが出来ます。 本章では `forestadm` を使用してグローバルシステムカタログに接続・終了する方法、 接続する前に必要な処理、そしてグローバルシステムカタログに接続した後の 設定モードについて説明をします。

## 2.1 環境構築ツールの起動コマンド・オプション

> 環境構築ツールの起動する際の書式は次のようになります。

> 書式
>   ./forestadm <オプション>
> オプション

>   `-h, --host hostname`
>   | 接続先GSCのあるホスト名/IP（必須）
>   `-p, --port port`
>   | 接続先GSCのポート番号（必須）
>   `-g, --gsc gscname`
>   | GSC名（必須）
>   `-i, --init` | GSC新規作成
>   `-U, --user username`
>   | ログイン名（必須）
>   `-W, --passwd password`
>   | パスワード
>   `-l, --log log_level`
>   | ログレベル（ERROR/WARNING/NOTICE/LOG/DEBUG/TRACE）
>   `-f, --file filename`
>   | 外部ファイル filename に記述したコマンドを一括読込
>   `--help` | ヘルプ

> 具体的な使用法について以下で説明します。

## 2.2 グローバルシステムカタログの新規作成

> 環境構築ツールでグローバルシステムカタログに接続するに先立ち、 グローバルシステムカタログを作成しておく必要があります。 グローバルシステムカタログを作成するには、オプションに `-i` を指定して 環境構築ツールを起動します。

> 作成例:

>     > ./forestadm -h 192.168.1.1 -p 6001 -g gsc -U postgres -W postgres -i
>     Welcome to PostgresForest Command Line Tool.
>     Connecting to Database GSC = 192.168.1.1:6001/gsc

>     グローバルシステムカタログ：gscを新規作成しました。

> これにより、 `-h` 、 `-p` オプションで指定したPostgreSQLに、 `-g` で指定した名前のグローバルシステムカタログデータベースが作成できます。

## 2.3 ログイン（グローバルシステムカタログへの接続）

> 事前に作成したグローバルシステムカタログに、環境構築ツールで接続・ログインします。

> パスワードをオプションで指定する場合:

>     > ./forestadm -h 192.168.1.1 -p 6001 -g gsc -U forest -W forest
>     Welcome to PostgresForest Command Line Tool.
>     Connecting to Database GSC = 192.168.1.1:6001/gsc

>     [gsc]$

> パスワードをオプションで与えない場合:

>     > ./forestadm -h 192.168.1.1 -p 6001 -g gsc -U forest
>     Welcome to PostgresForest Command Line Tool.
>     Connecting to Database GSC = 192.168.1.1:6001/gsc

>     Password >
>     forest

>     [gsc]$

> 接続すると、環境構築ツール独自のプロンプトが表示されます。 これにより、環境構築ツールの 各種コマンド. を対話的に実行し、 実行結果を見ることができるようになります。 接続した状態で実行できるコマンドは次章で説明します。

## 2.4 ログオフ（環境構築ツールの終了）

> ログオフするには、以下のように `\q` コマンドを発行します。:

>     [gsc]$ \q
>     Now closing the connection
>     >

## 2.5 設定モード（コマンドの実行対象）

> ログインして対話的にコマンドを実行できる状態では、次の２つのモードが存在します。

> > - グローバルシステムカタログ設定モード

> >   > このモードでは、データベースを配置するPostgreSQLサーバの登録や、 ユーザデータベースの配置先に関する操作、グローバルシステムの各種操作等、 PostgresForestデータベースクラスタ全体に関連する各種設定を行うことができます。

> > - ユーザデータベース設定モード

> >   > このモードでは、各ユーザデータベースに対するテーブル操作やDDL実行を行うことができます。

> 現在どちらのモードになっているかは、プロンプトの表示形式で判別することができます。 グローバルシステムカタログ設定モードで動作している場合、 プロンプトは接続中のグローバルシステムカタログ名と「 `$` 」で構成されます。 ユーザデータベース設定モードで動作している場合、 プロンプトは接続中のユーザデータベース名と「 `>` 」で構成されます。

> プロンプト例（グローバルシステムカタログ設定モード）:

>     [gsc]$

> プロンプト例（ユーザデータベース設定モード）:

>     [sample]>

> 次章の 各種コマンド. の説明では、全てのコマンドに対して そのコマンドを実行できるモードを記述しています。

> 環境構築ツールでログインした直後は、グローバルシステムカタログ設定モードになっています。

### 2.5.1 ユーザデータベース設定モードへの変更

> グローバルシステムカタログ設定モードからユーザデータベース設定モードに変更するには `open db` コマンドを使用します。 但し、事前にユーザデータベースが作成されている必要があります。 ユーザデータベース作成方法は ユーザデータベースの操作. を参照してください。

> 書式
>   open db <dbname> ;
> オプション

>   dbname: | 設定したいユーザデータベース名

> 実行例:

>     [gsc]$ open db sample ;
>     データベース：sampleをオープンしました。

>     [sample]>

### 2.5.2 グローバルシステムカタログ設定モードへの変更

> ユーザデータベース設定モードからグローバルシステムカタログ設定モードに変更するには `close db` コマンドを使用します。

> 書式
>   close db ;

> 実行例:

>     [sample]> close db ;
>     データベース：sampleをクローズしました。

>     [gsc]$

## 2.6 コマンド履歴

> ログインした状態で実行した 各種コマンド. は、 環境構築ツール内で履歴として保存しています。 履歴を表示するには `\h` コマンドを使用します。 履歴から実行したいコマンドがある場合、 `\h 番号` で実行することができます。 また、履歴はモードごとに独立して保持されます。

>     [gsc]$ \h
>       0 : drop instance 1
>       1 : create instance 192.168.1.1 6002
>       2 : show instance
>       3 : create db sample (0, 1)
>       4 : open db sample

>      [gsc]$ \h 2
>      インスタンス一覧
>       SERVERID |    HOST     | PORT | STATUS
>      --------------------------------------
>              0 | 192.168.1.1 | 6001 | 稼動中
>              1 | 192.168.1.1 | 6002 | 稼動中

# 3 環境構築ツール内で実行できるコマンド

本章では、環境構築ツールでログイン後に実行できる各種コマンドを説明します。

## 3.1 サーバ情報の操作

> 本節では、PostgresForestが参照するPostgreSQLサーバインスタンスの情報を 登録・削除・参照する方法を説明します。

### 3.1.1 サーバの登録

> グローバルシステムカタログ上にPostgreSQLサーバインスタンスを登録します。

> 書式
>   create instance <hostname> <port> ;
> オプション

>   hostname: | ホスト名やIPアドレス
>   port: | ポート番号

> 実行可能なモード
>   グローバルシステムカタログ設定モード
> 備考
>   このコマンドは、存在するPostgreSQLサーバインスタンスの情報を グローバルシステムカタログに追加するだけです。 このコマンドを実行しても、PostgreSQLサーバインスタンスそのものは生成しません。

> 実行例:

>     [gsc]$ create instance 192.168.1.1 6002 ;
>     インスタンス：192.168.1.1:6002を作成しました。

### 3.1.2 サーバの登録解除

> グローバルシステムカタログからPostgreSQLサーバインスタンスを登録解除します。

> 書式
>   drop instance <server_id> ;
> オプション

>   server_id: | サーバID（インスタンスID）

> 実行可能なモード
>   グローバルシステムカタログ設定モード
> 備考
>   データベースが存在するインスタンスは削除できません。

> 実行例:

>     [gsc]$ drop instance 1;
>     インスタンスID：1 を削除しました。

### 3.1.3 サーバの状態変更

> 指定したサーバ状態でグローバルシステムカタログのサーバ情報を変更します。

> 書式
>   set instance < up | down > <server_id> ;
> オプション

>   server_id: | サーバID（インスタンスID）
>   up: | 稼働中
>   down: | 障害中

> 実行可能なモード
>   グローバルシステムカタログ設定モード
> 備考
>   サーバが障害中となった場合、リカバリー処理を行った上で状態を `稼働中` に 戻す必要があります。 このコマンドで `稼働中` に設定をしてもリカバリー処理そのものは 行われないことに注意してください。

> 実行例:

>     [gsc]$ set instance up 1 ;
>     インスタンスID：1 の状態を稼動中に設定しました。

### 3.1.4 登録サーバ一覧表示

> 登録したPostgreSQLサーバインスタンス一覧を表示します。

> 書式１
>   show instance ;
> 書式２
>   \fi
> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ show instance ;
>     インスタンス一覧
>      SERVERID |    HOST     | PORT | STATUS
>     --------------------------------------
>             0 | 192.168.1.1 | 6001 | 稼動中
>             1 | 192.168.1.1 | 6002 | 稼動中

### 3.1.5 障害ログの表示

> 何らかの障害が発生した際に記録される障害ログを表示します。

> 書式１
>   show brokenlog ;
> 書式２
>   \fb
> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例（横に長いため右のほうは削除しています）:

>     [gsc]$ show brokenlog ;
>     切り離しログ一覧
>      SERVERID |       DATETIME        |   CLIENT    |
>     ------------------------------------------------------------------------------------------------
>             1 | 2006-12-20 06:49:34.0 | UnknownHost | Connection refused. Check that the hostnam ...

### 3.1.6 障害ログのクリア

> 障害ログを消去します。

> 書式
>   clear brokenlog ;
> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ clear brokenlog ;
>     切り離しログクリア

## 3.2 グローバルシステムカタログの操作

> 本節では、グローバルシステムカタログを操作（冗長化や削除）する方法を説明します。

### 3.2.1 グローバルシステムカタログの冗長化

> 現在接続中のグローバルシステムカタログを冗長化し、指定したサーバIDに配置します。

> 書式
>   create gsc <server_id> [force] ;
> オプション

>   server_id: | サーバID
>   force: | コピー先に同じ名前のグローバルシステムカタログが 存在する場合に強制的に上書きする

> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ create gsc 1 force ;
>     グローバルシステムカタログ：gscを、サーバID：1に作成しました。

### 3.2.2 グローバルシステムカタログ削除

> 指定したサーバIDのグローバルシステムカタログを削除します。

> 書式
>   drop gsc <server_id> <gsc_name> ;
> オプション

>   server_id: | サーバID

> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ create gsc 1 force ;
>     グローバルシステムカタログ：gscを、サーバID：1に作成しました。

### 3.2.3 グローバルシステムカタログ表示

> 登録したグローバルシステムカタログ一覧を表示します。

> 書式１
>   show gsc ;
> 書式２
>   \fg
> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ show gsc ;
>     グローバルシステムカタログ一覧
>      DBNAME |    HOST     | PORT | SERVERID
>     --------------------------------------
>      gsc    | 192.168.1.1 | 6001 |        0
>      gsc    | 192.168.1.1 | 6002 |        1

### 3.2.4 グローバルシステムカタログ整合性チェック

> グローバルシステムカタログの整合性をチェックし、 結果をコンソール画面に表示します。チェック内容は以下の通りです。

> > - 接続したグローバルシステムカタログからその他の グローバルシステムカタログ情報を取得し、順次接続します。
> > - すべてのグローバルシステムカタログの内容が一致していることを確認します。
> > - グローバルシステムカタログに登録されたユーザデータベースが存在することを確認します。
> > - グローバルシステムカタログに登録されたユーザデータベースのテーブルの存在を確認します。
> > - グローバルシステムカタログに登録されたユーザデータベースの パーティションテーブルにおけるカラムの存在を確認します。

> 書式
>   check gsc ;
> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ check gsc ;
>     グローバルシステムカタログの整合性をチェックしました。

## 3.3 ユーザデータベースの操作

> 本節ではユーザデータベースの作成・削除等で使用するコマンドについて説明します。

### 3.3.1 新規ユーザデータベース作成

> 新たなユーザデータベースを作成し、グローバルシステムカタログに情報を登録します。

> 書式
>   create db <db_name> (<server_id> [, <server_id>…] ) [force] [with Option];
> オプション

>   db_name: | 作成するデータベース名
>   server_id: | 作成するサーバID（複数の場合はカンマ区切りで列挙する）
>   force: | 強制的にユーザデータベースを作成する
>   Option: | 「CREATE DATABASE」 SQLのWITH句に渡されるオプション(default:なし)

> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ create db sample (0, 1) with "encoding='utf8'" ;
>     データベース：sampleを、サーバID：0,1,に作成しました。

### 3.3.2 ユーザデータベース削除

> ユーザデータベースを削除し、グローバルシステムカタログから情報を削除します。

> 書式
>   drop db <db_name> [force] ;
> オプション

>   db_name: | 削除するユーザデータベース名
>   force: | 強制的にユーザデータベースを削除する

> 実行可能なモード
>   グローバルシステムカタログ設定モード
> 備考
>   `drop db` を行うと、指定したユーザデータベースが全てのPostgreSQLサーバから削除されます。

> 実行例:

>     [gsc]$ drop db sample ;
>     データベース：sampleを削除しました。

### 3.3.3 ユーザデータベース一覧表示

> ユーザデータベース一覧を表示します。

> 書式１
>   show db ;
> 書式２
>   \fd
> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ show db;
>     データベース一覧
>      DBNAME | SERVERID |    HOST     | PORT
>     --------------------------------------
>      sample |        0 | 192.168.1.1 | 6001
>      sample |        1 | 192.168.1.1 | 6002

### 3.3.4 指定サーバへのユーザデータベース追加配置

> ユーザデータベースの配置先を追加し、グローバルシステムカタログに情報を登録します。 `create db` コマンドで事前に作成済みのユーザデータベースに対してのみ使用できます。

> 書式
>   create dbinstance <db_name> <server_id> [force];
> オプション

>   db_name: | データベース名
>   server_id: | 追加するサーバID（事前に `create instance` で登録されているもの）
>   force: | 指定した場合、既存のデータを上書きします

> 実行可能なモード
>   グローバルシステムカタログ設定モード
> 備考
>   v4.0の本コマンドは、ユーザデータベースの配置先を追加したという情報を グローバルシステムカタログに追加するのみとなっており、 ユーザデータベースの実体は複製しません。 本コマンド実行後に、PostgreSQLの標準ツール等を使用して 追加したPostgreSQLサーバ上にユーザデータベースを複製する必要があります。

> 実行例:

>     [gsc]$ show db ;
>     データベース一覧
>      DBNAME | SERVERID |    HOST     | PORT
>     --------------------------------------
>      sample |        0 | 192.168.1.1 | 6001

>     [gsc]$ create dbinstance sample 1 ;
>     データベースインスタンス：sampleを、サーバID：1に作成しました。

>     [gsc]$ show db ;
>     データベース一覧
>      DBNAME | SERVERID |    HOST     | PORT
>     --------------------------------------
>      sample |        0 | 192.168.1.1 | 6001
>      sample |        1 | 192.168.1.1 | 6002

### 3.3.5 指定サーバ上のユーザデータベース配置解除

> ユーザデータベースの配置先を減らし、グローバルシステムカタログに情報を登録します。

> 書式
>   drop dbinstance <db_name> <server_id> [force] ;
> オプション

>   db_name: | データベース名
>   server_id: | 配置を解除したいサーバID
>   force: | 指定した場合、強制的にユーザデータベースを削除します

> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ show db ;
>     データベース一覧
>      DBNAME | SERVERID |    HOST     | PORT
>     --------------------------------------
>      sample |        0 | 192.168.1.1 | 6001
>      sample |        1 | 192.168.1.1 | 6002

>     [gsc]$ drop dbinstance sample 1 ;
>     データベースインスタンス：sampleを、サーバID：1から削除しました。

>     [gsc]$ show db ;
>     データベース一覧
>      DBNAME | SERVERID |    HOST    | PORT
>     --------------------------------------
>      sample |        0 | 192.168.1.1 | 6001

## 3.4 コンフィグレーションの操作

> 本節では、アプリケーションプログラムがPostgresForestのJDBCドライバを使って 接続した際の動作を決定する、コンフィグレーションの操作について説明します。

### 3.4.1 コンフィグレーション作成

> グローバルシステムカタログに新たなコンフィグレーションを登録します。

> 書式
>   create config <config_name> ;
> オプション

>   config_name: | コンフィグレーション名

> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ create config 'sample-config' ;
>     コンフィグレーション：sample-configを作成しました。

### 3.4.2 コンフィグレーション削除

> グローバルシステムカタログに登録されているコンフィグレーションを削除します。

> 書式
>   drop config <cfgname> ;
> オプション

>   cfgname: | コンフィグレーション名

> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ drop config 'sample-config' ;
>     コンフィグレーション：sample-configを削除しました。

### 3.4.3 コンフィグレーション設定

> グローバルシステムカタログに登録されているコンフィグレーション項目の値を設定します。

> 書式
>   set config <cfgname> <param_name>=<param_value> [,<param_name>=<param_value>, …] ;
> オプション

>   cfgname: | コンフィグレーション名
>   param_name: | コンフィグレーション項目名
>   param_value: | コンフィグレーション項目値

> コンフィグレーション項目名

>   cfgname: | コンフィグレーション名
>   descript: | 説明
>   refresh: | グローバルシステムカタログキャッシュ読み込み間隔（秒）(default:30)
>   retry: | 障害時リトライ回数 (default:0)
>   timeout: | 障害判定タイムアウト（秒）(default:300)
>   dist: | 検索処理分散方式（ラウンドロビン:0, 固定:1） (default:0)
>   pmode: | パーティション無しモード [†] （パーティションテーブル有り:0, パーティションテーブル無し:1） (default:0)
>   smode: | 更新同期モード（する:1, しない:0） (default:0)

> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ set config sample-config refresh=100, descript='サンプル' ;
>     コンフィグレーション：sample-configを更新しました。

> [†] | パーティションテーブル無し (pmode=1) とすることで、内部の動作が若干高速化されます。

### 3.4.4 コンフィグレーションコピー

> グローバルシステムカタログに登録されているコンフィグレーションをコピーし、 新たなコンフィグレーションを作成します。

> 書式
>   replicate config <src_conf> <new_conf> ;
> オプション

>   src_conf: | コピー元コンフィグレーション名
>   new_conf: | コピーして生成するコンフィグレーション名

> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ replicate config 'sample-config' 'copy-config' ;
>     コンフィグレーション：sample-configをcopy-configに複製しました。

### 3.4.5 コンフィグレーション表示

> コンフィグレーションの一覧を表示します。

> 書式１
>   show config ;
> 書式２
>   \fc
> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例（横に長いため右のほうは表示していません）:

>     [gsc]$ show config ;
>     コンフィグレーション一覧
>             CONFIG         |      DESCRIPTION      | CACHE_REFRESH | RETRY_COUNT | DETECT_TIMEOUT |
>     ------------------------------------------------------------------------------------------------
>      FOREST_DEFAULT_CONFIG | Default Configuration |            30 |           3 |             30 |
>      copy-config           | サンプル              |           100 |           3 |             30 |
>      sample-config         | サンプル              |           100 |           3 |             30 |

## 3.5 DDLの実行

> ユーザデータベースに対して、PostgreSQL準拠のDDLを実行することができます。

> 実行可能なDDLは以下の通りです。

> > - CREATE TABLE [‡]
> > - ALTER TABLE
> > - DROP TABLE
> > - CREATE VIEW
> > - DROP VIEW
> > - CREATE INDEX
> > - ALTER INDEX
> > - DROP INDEX

> 各DDLの書式は、PostgreSQLマニュアル等を参照してください。

> 実行可能なモード
>   ユーザデータベース設定モード

> 実行例:

>     [sample]> create table test1 ( i integer ) ;
>     [DDL]
>     create table test1 ( i integer )
>     [結果]-->
>     正常に実行されました。

> また、外部ファイルにDDLをまとめて記述しておき、一度に実行することができます。

> 書式
>   \i <filepath>
> オプション

>   filepath: | DDLの書かれた外部ファイルのパス

> 実行可能なモード
>   ユーザデータベース設定モード

> 実行例:

>     [sample]> \i '/home/forest/PostgresForest_v32_doc/sample/sql/createtable.sql'
>     execute command
>       file：/home/forest/PostgresForest_v32_doc/sample/sql/createtable.sql
>     [DDL]
>      create table customer (     cust_cd character(10),     cust_name character varying(30),
>          post_no character(10),     address character varying(50),     phone_no character(20),
>          pres_name character varying(20),     primary key (cust_cd))
>     [結果]-->
>     正常に実行されました。

>     [DDL]
>       create table employee (     emp_cd character(10),  .....

>       ......

> [‡] | `create table` でテーブルを作成すると、自動的に 多重化テーブル となります。 テーブルのパーティション化については、 テーブルのパーティション操作. を 参照してください。

## 3.6 テーブルのパーティション操作

> 本節では、テーブルの分散配置に関して操作をする方法を説明します。

### 3.6.1 テーブル一覧表示

> データベース内のテーブル一覧を表示します。

> 書式１
>   show table [<table_name>] ;
> 書式２
>   \ft [<table_name>]
> オプション

>   table_name: | 詳細表示したいテーブル名 指定が無い場合は全てのテーブルの概要

> 実行可能なモード
>   ユーザデータベース設定モード

> 実行例:

>     [sample]> show table ;
>     テーブル一覧
>        TABLENAME    | TABLETYPE | PARTITION_FUNC | STATUS
>     ------------------------------------------------------
>      customer       | 多重化    |                | 稼動中
>      employee       | 多重化    |                | 稼動中
>      item           | 多重化    |                | 稼動中
>      salesorder     | 多重化    |                | 稼動中
>      salesordertail | 多重化    |                | 稼動中

### 3.6.2 テーブルのパーティション化（１）

> 多重化テーブル（ `create table` で作成したテーブル）を、複数のテーブルに分割します。 ユーザデータベースを配置した全てのサーバ上で、対照になるよう分割します。

> 書式
>   part table <table_name> (<keycolumn> [, <keycolumn>..] ) <count> [ with [hashname=<hash_class>], [rest=<restore>] ] ;
> オプション

>   table_name: | テーブル名
>   keycolumn: | パーティション化のキー属性名 ※キー属性は、括弧内にカンマ区切りで記述します。
>   count: | パーティション数
>   hash_class: | パーティション関数のクラス名
>   rest: | データ移行の有無 (有:1、無:0(default))

> 実行可能なモード
>   ユーザデータベース設定モード

> 実行例:

>     [sample]> show table salesorder ;
>     テーブル項目一覧[salesorder]
>      PARTITION_KEY | COLUMNNAME  | DATATYPE
>     ----------------------------------------
>                    | order_no    | bpchar
>                    | cust_cd     | bpchar
>                    | emp_cd      | bpchar
>                    | distcent_cd | bpchar
>                    | ent_date    | date
>                    | ent_time    | time
>                    | supp_date   | date
>                    | sum         | int4
>                    | order_stat  | int2

>     [sample]> part table salesorder (order_no) 2 ;
>     パーティション1テーブル：salesorder を作成しました。

>     [sample]> show table salesorder ;
>     テーブル項目一覧[salesorder]
>      PARTITION_KEY | COLUMNNAME  | DATATYPE
>     ----------------------------------------
>       *            | order_no    | bpchar
>                    | cust_cd     | bpchar
>                    | emp_cd      | bpchar
>                    | distcent_cd | bpchar
>                    | ent_date    | date
>                    | ent_time    | time
>                    | supp_date   | date
>                    | sum         | int4
>                    | order_stat  | int2

>     [sample]> show table ;
>     テーブル一覧
>        TABLENAME    |    TABLETYPE     | PARTITION_FUNC | STATUS
>     -------------------------------------------------------------
>      customer       | 多重化           |                | 稼動中
>      employee       | 多重化           |                | 稼動中
>      item           | 多重化           |                | 稼動中
>      salesorder     | パーティション化 | DEFAULT        | 稼動中
>      salesordertail | 多重化           |                | 稼動中

> この例では、２つのサーバ上に構成されたsampleデータベースにおいて、 salesorderテーブルをパーティション化しています。 パーティション前と後のイメージは以下の通りです。

> パーティション前

>   サーバＩＤ
>   0 | 1
>   --- | ---
>   salesorder | salesorder

> パーティション後

>   サーバＩＤ
>   0 | 1
>   --- | ---
>   salesorder_00 | salesorder_00
>   salesorder_01 | salesorder_01

> パーティション化することで物理的には複数のテーブルに分かれますが、 JDBCドライバでアクセスする際には元のテーブル名 （ この場合であれば `salesorder` ）で アクセスしてください。

### 3.6.3 テーブルのパーティション化（２）

> 多重化テーブル（ `create table` で作成したテーブル）を、複数のテーブルに分割します。 テーブルのパーティション化（１）_. とは違い、各サーバごと非対照にテーブルを分割配置できます。

> 書式
>   part table2 <table_name> (<keycolumn>, <keycolumn>...) <count> servid=<server_id> partno=(<part_no>[,<part_no>...]) [, servid=<server_id>, partno=(<part_no> [, <part_no>…] ) ...] [with [hashname=<hash_class>], [rest=<restore>] ] ;
> オプション

>   table_name: | テーブル名
>   keycolumn: | パーティション化のキー属性名 ※キー属性は、括弧内にカンマ区切りで記述します。
>   count: | パーティション数
>   part_no: | パーティションテーブル番号 ※サーバ毎に配置するパーティション２テーブルをカンマ区切りで括弧内に記述します
>   hash_class: | パーティション関数のクラス名
>   restore: | データ移行の有無 (有：1、無：0(default))

> 実行可能なモード
>   ユーザデータベース設定モード

> 実行例:

>     [sample]> show table salesordertail ;
>     テーブル項目一覧[salesordertail]
>      PARTITION_KEY | COLUMNNAME | DATATYPE
>     ---------------------------------------
>                    | order_no   | bpchar
>                    | item_cd    | bpchar
>                    | pack_num   | int4
>                    | sepa_num   | int4
>                    | sum        | int4

>     [sample]> part table2 salesordertail (order_no) 2 servid=0 partno=(0) , servid=1 partno=(1) ;
>     パーティション2テーブル：salesordertail を作成しました。

>     [sample]> show table ;
>     テーブル一覧
>        TABLENAME    |     TABLETYPE      | PARTITION_FUNC | STATUS
>     ---------------------------------------------------------------
>      customer       | 多重化             |                | 稼動中
>      employee       | 多重化             |                | 稼動中
>      item           | 多重化             |                | 稼動中
>      salesorder     | パーティション化   | DEFAULT        | 稼動中
>      salesordertail | パーティション化２ | DEFAULT        | 稼動中

>     [sample]> show table salesordertail ;
>     テーブル項目一覧[salesordertail]
>      PARTITION_KEY | COLUMNNAME | DATATYPE
>     ---------------------------------------
>       *            | order_no   | bpchar
>                    | item_cd    | bpchar
>                    | pack_num   | int4
>                    | sepa_num   | int4
>                    | sum        | int4

> この例では、２つのサーバ上に構成されたsampleデータベースにおいて、 salesordertailテーブルを非対称のパーティション化しています。 パーティション前と後のイメージは以下の通りです。

> パーティション前

>   サーバＩＤ
>   0 | 1
>   --- | ---
>   salesordertail | salesordertail

> パーティション後

>   サーバＩＤ
>   0 | 1
>   --- | ---
>   salesordertail_00 |
>   | salesordertail_01

### 3.6.4 テーブルのパーティション解除

> `part table` または `part table2` コマンドを使ってパーティション化したテーブルを、 多重化テーブルへと戻します。

> 書式
>   unpart table <table_name> ;
> オプション

>   table_name: | テーブル名

> 実行可能なモード
>   ユーザデータベース設定モード

### 3.6.5 パーティションテーブルの優先度設定

> パーティション化された各分割テーブルのアクセス優先度を設定します。

> 書式
>   set priority <table_name> <part_no> (<server_id>[ , <server_id> …]) ;
> オプション

>   table_name: | テーブル名
>   part_no: | パーティションテーブル番号
>   server_id: | サーバID ※優先度順にサーバIDを記述します。

### 3.6.6 パーティションテーブルの優先度表示

> 指定されたテーブルの優先度を表示します。

> 書式１
>   show priority <table_name>;
> 書式２
>   \fp <table_name>
> オプション

>   table_name: | テーブル名

> 実行可能なモード
>   ユーザデータベース設定モード

## 3.7 パーティション関数操作

> 本節では、テーブルをパーティション化する際に分割の仕方を制御するパーティション関数について 登録・削除・一覧表示をする方法を説明します。

### 3.7.1 パーティション関数登録

> グローバルシステムカタログに新たなパーティション関数を登録します。 パーティション関数の実体は、``org.postgresforest.vm.Hash_I`` インターフェースを実装した Javaのクラスです。

> 書式
>   create hash <hash_class> <‘file_path’> [with <description> ]] ;
> オプション

>   hash_class: | パーティション関数のクラス名パッケージ名付の表記形式）
>   file_path: | パーティション関数のクラスファイルのファイルパス
>   description: | パーティション関数の説明 (default:なし)

> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例（右側折り返しています）:

>     [gsc]$ create hash 'org.postgresforest.vm.IntegerRangeHash5000'
>            '/home/forest/IntegerRangeHash5000.class' with '5000件ごとにレンジ分割する関数' ;
>     パーティション関数：org.postgresforest.vm.IntegerRangeHash5000を作成しました。

### 3.7.2 パーティション関数削除

> グローバルシステムカタログに登録されているパーティション関数を削除します。

> 書式
>   drop hash <hash_class>;
> オプション

>   hash_class: | パーティション関数のクラス名

> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ drop hash 'org.postgresforest.vm.IntegerRangeHash5000' ;
>     パーティション関数：org.postgresforest.vm.IntegerRangeHash5000を削除しました。

### 3.7.3 パーティション関数一覧表示

> パーティション関数一覧を表示します。

> 書式１
>   show hash ;
> 書式２
>   \fh
> 実行可能なモード
>   グローバルシステムカタログ設定モード

> 実行例:

>     [gsc]$ show hash ;
>     パーティション関数一覧
>                       HASHNAME                  |          DESCRIPTION
>     -----------------------------------------------------------------------------
>      org.postgresforest.vm.IntegerRangeHash5000 | 5000件ごとにレンジ分割する関数