# PostgresForest 4.0 環境構築ツール リファレンス

目次

# 1 環境構築ツールとは

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

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

[*] | 「グローバルシステムカタログ／GSC」とは、PostgresForestデータベース環境におけるPostgreSQLインスタンス、データベース、テーブルなどのメタ情報を保持する領域です。GSCの実体はPostgreSQLのデータベースとして作成されます。

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

環境構築ツール `forestadm` を使用することで、 PostgresForestのデータベース環境に接続し、 対話的にデータベース管理のための設定作業を行うことが出来ます。

本章では `forestadm` コマンドを使用してグローバルシステムカタログに接続・終了する方法、 接続する前に必要な処理、そしてグローバルシステムカタログに接続した後の 設定モードについて説明をします。

## 2.1 コマンドラインオプション

環境構築ツールを起動する際の実行方法は以下の通りです。

書式:

    forestadm [-i] -h HOST -p PORT -g GSC -U USER [-W PASS] [-l LEVEL] [-f FILE]

オプション:

    -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]$

環境構築ツールを起動すると、環境構築ツールのコマンド入力プロンプトが表示されます。

このプロンプトにコマンドを対話的に入力することで、PostgresForestデータ ベース環境の管理を行うことができるようになります。 プロンプトから入力できるコマンドは次章で説明します。

## 2.4 環境構築ツールの終了

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

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

## 2.5 GSC設定モードとユーザデータベース設定モード

> 環境構築ツールを起動してコマンドを入力可能な状態には、次の２つの状態が存在します。

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

> >   > このモードでは、データベースを配置するPostgreSQLインスタンスの登録や、 ユーザデータベースの配置に関する設定、コンフィギュレーションの設定など、 PostgresForestデータベース環境全体に関連する設定を行うことができます。

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

> >   > このモードでは、特定のユーザデータベースに対するテーブル操作（作成・削除・パーティション化など）を行うことができます。

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

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

>     [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 PostgreSQLインスタンス情報の操作

> 本節では、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

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

> 実行例:

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

### 3.1.3 インスタンスのステータス変更

> 指定したインスタンスのステータスを変更します。

> 書式:

>     set instance < up | down > <server_id> ;

> オプション

> > server_id: | サーバID
> > up: | 稼働中
> > down: | 障害中

> 実行可能なモード
>   グローバルシステムカタログ設定モード
> 備考
>   サーバが障害中となった場合、リカバリ処理を行った上で状態を「稼働中」に 戻す必要があります。 このコマンドで「稼働中」に設定をしてもリカバリ処理は行われないことに注意してください。 PostgresForestデータベース環境のリカバリ手順の詳細に関しては、「PostgresForest 管理者ガイド」を参照してください。

> 実行例:

>     [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.2 障害ログの操作

### 3.2.1 障害ログの表示

> 障害が発生してインスタンスが切り離された場合のログを表示します。

> 書式１:

>     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.2.2 障害ログのクリア

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

> 書式:

>     clear brokenlog ;

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

> 実行例:

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

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

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

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

> 指定したサーバIDのインスタンス上にグローバルシステムカタログの複製を配置して、グローバルシステムカタログの冗長化を行います。

> 書式:

>     create gsc <server_id> [force] ;

> オプション

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

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

> 実行例:

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

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

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

> 書式:

>     drop gsc <server_id> <gsc_name> ;

> オプション

>   server_id: | サーバID

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

> 実行例:

>     [gsc]$ drop gsc 1;
>     グローバルシステムカタログ：gscを、サーバID：1から削除しました。

### 3.3.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.3.4 グローバルシステムカタログ整合性チェック

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

> > - 多重化しているGSCの内容が同じであること。
> > - GSCに登録されているユーザデータベースが各インスタンスに存在していること。
> > - GSCに登録されているデータベース内のテーブルが各インスタンスに存在していること。
> > - テーブルが多重化テーブルの場合、レコード数が同じであること。

> 書式:

>     check gsc ;

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

> 実行例:

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

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

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

### 3.4.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.4.2 ユーザデータベース削除

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

> 書式:

>     drop db <db_name> [force] ;

> オプション

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

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

> 実行例:

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

### 3.4.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.4.4 既存のユーザデータベースへのインスタンスの追加

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

> 書式:

>     create dbinstance <db_name> <server_id> [force];

> オプション

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

> 実行可能なモード
>   グローバルシステムカタログ設定モード
> 備考
>   現在のバージョンでは、ユーザデータベースの配置先を追加したという管理情報を グローバルシステムカタログに追加するのみとなっており、 ユーザデータベースの実体は複製しません。 本コマンド実行後に、PostgreSQLの標準ツール等を使用して 追加したPostgreSQLインスタンス上にユーザデータベースを複製する必要があります。 詳細な手順については、「PostgresForest 管理者ガイド」を参照してください。

> 実行例:

>     [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.4.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.5 コンフィグレーションの操作

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

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

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

> 書式:

>     create config <config_name> ;

> オプション

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

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

> 実行例:

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

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

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

> 書式:

>     drop config <cfgname> ;

> オプション

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

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

> 実行例:

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

### 3.5.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を更新しました。

### 3.5.4 コンフィグレーションの別名での複製

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

> 書式:

>     replicate config <src_conf> <new_conf> ;

> オプション

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

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

> 実行例:

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

### 3.5.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.6 テーブル・インデックス・ビューの作成・削除・変更

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

> 実行可能なSQLコマンドは以下の通りです。

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

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

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

> 実行例:

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

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

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

>   filepath: | SQLコマンドの記述された外部ファイルのPATH

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

> 実行例:

>     [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.7 テーブルのパーティション操作

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

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

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

> 書式１:

>     show table [<table_name>] ;

> 書式２:

>     \\ft [<table_name>]

> オプション

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

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

> 実行例:

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

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

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

> 書式:

>     part table <table_name> (<keycolumn> [, <keycolumn>..] ) <count> [with hashname=<hashname>] ;

> オプション

>   table_name: | テーブル名
>   keycolumn: | パーティション化のキー属性名 ※キー属性は、括弧内にカンマ区切りで記述します。
>   count: | パーティション数
>   hashname: | パーティション関数のクラス名

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

> 実行例:

>     [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.7.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=<hashname>] ;

> オプション

>   table_name: | テーブル名
>   keycolumn: | パーティション化のキー属性名 ※キー属性は、括弧内にカンマ区切りで記述します。
>   count: | パーティション数
>   part_no: | パーティションテーブル番号 ※サーバ毎に配置するパーティション２テーブルをカンマ区切りで括弧内に記述します
>   hashname: | パーティション関数のクラス名
>   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.7.4 テーブルのパーティション解除

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

> 書式:

>     unpart table <table_name> ;

> オプション

>   table_name: | テーブル名

> 実行可能なモード
>   ユーザデータベース設定モード
> 備考
>   `part table2` で作成したパーティションテーブルは解除できません。 一旦削除してから再作成する必要があります。

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

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

> 書式:

>     set priority <table_name> <part_no> (<server_id>[ , <server_id> …]) ;

> オプション

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

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

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

> 書式１:

>     show priority <table_name>;

> 書式２:

>     \\fp <table_name>

> オプション

>   table_name: | テーブル名

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

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

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

### 3.8.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.8.2 パーティション関数削除

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

> 書式:

>     drop hash <hash_class>;

> オプション

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

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

> 実行例:

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

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

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

> 書式１:

>     show hash ;

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

> 実行例:

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