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

.. 本ドキュメントは、reStructuredText 記法に従って作成しています

.. contents:: 目次
.. sectnum::

環境構築ツールとは
##################

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

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

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

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

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

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

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

  書式
   ./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                 ヘルプ

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

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

  環境構築ツールでグローバルシステムカタログに接続するに先立ち、
  グローバルシステムカタログを作成しておく必要があります。
  グローバルシステムカタログを作成するには、オプションに ``-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`` で指定した名前のグローバルシステムカタログデータベースが作成できます。


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

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

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

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

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

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

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

    [gsc]$ \q
    Now closing the connection
    >

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

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

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

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

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

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

    [gsc]$

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

    [sample]>

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

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

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

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

  書式
    open db <dbname> ;

  オプション
    :dbname:  設定したいユーザデータベース名

  実行例::

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

    [sample]>

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

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

  書式
    close db ;

  実行例::

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

    [gsc]$

コマンド履歴
++++++++++++

  ログインした状態で実行した 各種コマンド_. は、
  環境構築ツール内で履歴として保存しています。
  履歴を表示するには ``\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 | 稼動中
     

環境構築ツール内で実行できるコマンド
####################################
.. _各種コマンド:

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

サーバ情報の操作
++++++++++++++++

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

サーバの登録
------------

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

  書式
    create instance <hostname> <port> ;

  オプション
    :hostname:   ホスト名やIPアドレス
    :port:       ポート番号

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

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

  実行例::

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

サーバの登録解除
----------------

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

  書式
    drop instance <server_id> ;

  オプション
    :server_id:  サーバID（インスタンスID）

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

  備考
    データベースが存在するインスタンスは削除できません。

  実行例::

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

サーバの状態変更
----------------

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

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

  オプション
    :server_id:  サーバID（インスタンスID）
    :up:         稼働中
    :down:       障害中

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

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

  実行例::

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

登録サーバ一覧表示
------------------

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

  書式１
    show instance ; 

  書式２
    \\fi

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

  実行例::

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

障害ログの表示
--------------

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

  書式１
    show brokenlog ;

  書式２
    \\fb

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

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

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

障害ログのクリア
----------------

  障害ログを消去します。
  
  書式
    clear brokenlog ;

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

  実行例::

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


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

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

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

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

  書式
    create gsc <server_id> [force] ;

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

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

  実行例::

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

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

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

  書式
    drop gsc <server_id> <gsc_name> ;

  オプション
    :server_id:   サーバID

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

  実行例::

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

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

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

  書式１
    show gsc ;

  書式２
    \\fg

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

  実行例::

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

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

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

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

  書式
    check gsc ;

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

  実行例::

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


ユーザデータベースの操作
++++++++++++++++++++++++

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

新規ユーザデータベース作成
--------------------------

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

  書式
    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,に作成しました。

ユーザデータベース削除
----------------------

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

  書式
    drop db <db_name> [force] ;

  オプション
    :db_name: 　削除するユーザデータベース名
    :force:     強制的にユーザデータベースを削除する

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

  備考
    ``drop db`` を行うと、指定したユーザデータベースが全てのPostgreSQLサーバから削除されます。
    
  実行例::

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

ユーザデータベース一覧表示
--------------------------

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

  書式１
    show db ;

  書式２
    \\fd

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

  実行例::

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

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

  ユーザデータベースの配置先を追加し、グローバルシステムカタログに情報を登録します。
  ``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

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

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

  書式
    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

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

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

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

  書式
    create config <config_name> ;

  オプション
    :config_name:    コンフィグレーション名

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

  実行例::

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

コンフィグレーション削除
------------------------

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

  書式
    drop config <cfgname> ;

  オプション
    :cfgname:   コンフィグレーション名

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

  実行例::

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

コンフィグレーション設定
------------------------

  グローバルシステムカタログに登録されているコンフィグレーション項目の値を設定します。
  
  書式
    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) とすることで、内部の動作が若干高速化されます。



コンフィグレーションコピー
--------------------------

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

  書式
    replicate config <src_conf> <new_conf> ;
  
  オプション
    :src_conf:   コピー元コンフィグレーション名
    :new_conf:   コピーして生成するコンフィグレーション名

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

  実行例::

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

コンフィグレーション表示
------------------------

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

  書式１
    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 |

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`` でテーブルを作成すると、自動的に *多重化テーブル* となります。
         テーブルのパーティション化については、 テーブルのパーティション操作_. を
         参照してください。

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

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

テーブル一覧表示
----------------

  データベース内のテーブル一覧を表示します。
  
  書式１
    show table [<table_name>] ;

  書式２
    \\ft [<table_name>]

  オプション
    :table_name:   詳細表示したいテーブル名
                   指定が無い場合は全てのテーブルの概要

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

  実行例::

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

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

  多重化テーブル（ ``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`` ）で
  アクセスしてください。

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

  多重化テーブル（ ``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 |
    +-------------------+-------------------+

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

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

  書式
    unpart table <table_name> ;

  オプション
    :table_name:   テーブル名

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

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

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

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

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

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

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

  書式１
    show priority <table_name>;

  書式２
    \\fp <table_name>

  オプション
    :table_name:    テーブル名

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

パーティション関数操作
++++++++++++++++++++++

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

パーティション関数登録
----------------------

  グローバルシステムカタログに新たなパーティション関数を登録します。
  パーティション関数の実体は、``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を作成しました。


パーティション関数削除
----------------------

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

  書式
    drop hash <hash_class>;

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

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

  実行例::

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

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

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

  書式１
    show hash ;

  書式２
    \\fh

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

  実行例::

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