お問い合わせ
03-5979-2701
PowerGres
PowerGres V9.1 体験記 戻る

第 1 回 PowerGres Plus をインストールしてみよう

対象バージョン: PowerGres Plus V9.1
本文では CentOS 5 (64 ビット版) において PowerGres Plus V9.1(Linux 版)を使用して解説しています。

PowerGres Plus は、オープンソースデータベースの PostgreSQL をベースに、GUI の管理ツールによる使いやすさとストレージ管理機能を拡張して、信頼性とセキュリティを強化したデータベース製品です。PowerGres Plus では、GUI がその他の PowerGres ファミリーに合わせて刷新されました。また、トランザクションログの二重化や、データファイルの破損検査に加えて透過的データ暗号化機能に対応しました。

[PowerGres Plus V9.1 - オープンソースデータベース PostgreSQL に信頼性とセキュリティをプラス]
https://powergres.sraoss.co.jp/s/ja/product/PlusV91.php

第1回では、より使いやすく、よりセキュアにデータベースの運用管理を行えるようになった PowerGres Plus V9.1 の評価版を使い、インストールからデータベースのセットアップ、基本的なデータベース操作までを紹介します。

  1. インストール
    1. 評価版のダウンロード
    2. 圧縮ファイルの展開
    3. インストーラの実行
    4. インストール後のディレクトリ構成
    5. インストールされるコマンドの概説
  2. セットアップ
    1. PowerGres Plus 管理ツールの起動
    2. サーバの登録とデータベースクラスタの作成
    3. データベースサーバの起動
  3. 基本的なデータベースの操作
    1. データベースユーザの作成
    2. データベースの作成
    3. psql によるデータベースへの接続
    4. SQL の実行
  4. 次回予告

インストール

PowerGres Plus をインストールしていきます。インストール作業は root ユーザで行います。

評価版のダウンロード

以下の URL から PowerGres Plus V9.1(Linux 版)の評価版をダウンロードします。

[PowerGres Plus(Linux 版) 評価版ダウンロード]
https://powergres.sraoss.co.jp/s/ja/download/download-PlusLinux.php

圧縮ファイルの展開

ダウンロードしたファイルを展開します。

[root@node1 ~]# tar zxvf powergresplus-9.1.tar.gz
powergresplus-9.1/
powergresplus-9.1/LICENSE
:
:
powergresplus-9.1/proj-COPYING.txt
powergresplus-9.1/update.sh

インストーラの実行

展開したディレクトリに移動し、インストールスクリプトを実行します。

使用許諾契約書の内容に同意し、ライセンスキーを入力します。ライセンスキーは Evaluation と入力しましょう。製品版と同じ機能が 60 日間無料で利用できます。

[root@node1 ~]# cd powergresplus-9.1
[root@node1 powergresplus-9.1]# cd powergresplus-9.1
[root@node1 powergresplus-9.1]# sh install.sh
本ソフトウェアプログラムは、以下の 「使用許諾契約書」 の条件にしたがって
使用許諾されます。したがって、必ず本製品をインストールする前に「使用許
:
:
Do you agree to the license terms (yes/no): yes

Please enter the license key (XXXX-XXXX-XXXX-XXXX): Evaluation
License key is for evaluation purposes.
You can use during the 60-day trial period.

ライセンスキーを入力すると、続けて共有メモリに関するカーネルパラメータの設定が行われます。

Checking kernel parameters...
  kernel.shmmax: 515736576 (no need for change)
  kernel.shmall:    125912 (no need for change)

カーネルパラメータの設定値が推奨値よりも少ない場合は、推奨値まで増やすかどうか尋ねられるので、yes と入力しましょう。

Checking kernel parameters...
  kernel.shmmax: 257868288 -> 515736576
  kernel.shmall:     62956 ->    125912

Do you change the kernel parameters (yes/no): yes

Changing kernel parameters... Done.

共有メモリに関するパラメータ設定

PowerGres Plus のベースとなっている PostgreSQL は、起動時に共有メモリを含めたいくつかのメモリ領域をメモリ上に確保します。代表的なものは、データベースの読み書きに使われる共有バッファ とトランザクションログの書き込みに使われる WAL バッファ です。これらのサイズが共有メモリセグメントの上限値 (SHMMAX) をうわまわってしまうと、PostgreSQL は起動できなくなります。

以下はその例です。PowerGres Plus の管理ツールを使用せずに直接コマンドラインで PostgreSQL を起動しようとすると、エラーメッセージが表示されて起動に失敗します。

[postgres@node1 ~]$ pg_ctl start -D /var/lib/pgsql/data start
サーバは起動中です。
[postgres@node1 ~]$ 2013-05-13 17:19:23 JST [25382] FATAL:  could not create shared memory segment: Invalid argument
2013-05-13 14:19:23 JST [25382] DETAIL:  Failed system call was shmget(key=5440001, size=4011376640, 03600).
2013-05-13 14:19:23 JST [25382] HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.
                                       You can either reduce the request size or reconfigure the kernel with larger SHMMAX......

したがって、豊富なメモリを利用して PostgreSQL を稼動する場合は、PostgreSQL 側の設定だけでなく、OS 側の設定も必要である点に注意が必要です。ただし、最近の OS は共有メモリに関する設定は大きめになっており、あまり問題になることはありません。

PowerGres Plus のインストールスクリプトでは、SHAMAX の推奨値を搭載メモリの 25% としています。また、システム全体の共有メモリの総量 (SHMALL) も、SHAMMAX に応じた値に設定されます。

共有メモリの設定が完了すると、パッケージ群とライセンスキーがインストールされます。なお、インストール中、postgres ユーザが存在しなければ、自動的に作成されます。

Installing packages...
準備中...                ########################################### [100%]
   1:powergresplus91-libs   ########################################### [  7%]
:
:
  13:powergresplus91-pltcl  ########################################### [ 93%]
  14:powergresplus91-test   ########################################### [100%]

Installing license key... Done.

PowerGres Plus V9.1 installation completed.

以上でインストールは完了です。

インストール後のディレクトリ構成

PowerGres Plus のディレクトリ構成は以下の通りです。

/opt/powergresplus91/ PowerGres Plus のインストールディレクトリ
bin/ PowerGres Plus 実行ファイル
etc/ PowerGres Plus 設定ファイル
include/ C言語用ヘッダファイル
lib/ C 言語用ライブラリファイル
libexec/ 形態素解析 - MeCab 実行ファイル
share/ マニュアル及び各種共有ファイル
ssl/ 透過的データ暗号化で利用する OpenSSL のマニュアルおよびスクリプトファイル

インストールされるコマンドの概説

/opt/powergresplus91/bin/ にはコマンドラインから実行できる各種コマンドが格納されています。主なコマンドは PowerGres Plus の管理ツールを通して実行できます。以下の表は代表的なコマンドです。

コマンド コマンドの説明 コマンド コマンドの説明
initdb データベースクラスタの初期化 pg_dump データベースの論理バックアップ
createdb データベースの作成 pg_restore 論理バックアップからデータベースのリストア
dropdb データベースの削除 pgx_dmpall*1 データベースクラスタ、テーブル空間、設定ファイルのバックアップ
createuser データベースユーザの登録 pgx_rcvall*1 データベースクラスタ、テーブル空間、設定ファイルのリカバリ
dropuser データベースユーザの削除 psql SQL インタープリタ
pg_ctl データベースサーバの起動・停止など pgx_getenvdata*1*2 データベース環境の情報を取得

*1 PowerGres Plus 独自のコマンドです。

*2 管理ツールからは実行できません。

環境変数の設定

インストールが完了したら、環境変数を設定します。PowerGres Plus の管理ツールを操作し、データベースを管理するユーザの ~/.bash_profile に以下の行を追加します。本連載ではデータベースを管理するユーザは postgres とします。

PATH=/opt/powergresplus91/bin:$PATH
MANPATH=/opt/powergresplus91/share/man:$MANPATH
LD_LIBRARY_PATH=/opt/powergres91/lib:$LD_LIBRARY_PATH
export PATH MANPATH LD_LIBRARY_PATH

セットアップ

PowerGres Plus を使ってデータベースをセットアップしていきましょう。postgres ユーザで管理ツールを起動し、postgres ユーザの /var/lib/pgsql/data ディレクトリにデータベースクラスタを作成します。

PowerGres Plus 管理ツールの起動

管理ツール を以下のコマンドで起動します。

[postgres@node1 ~]$ powergres-mgr &

管理ツールが起動します。

管理ツール起動画面

サーバの登録とデータベースクラスタの作成

管理ツールでデータベースクラスタを作成します。

サーバを登録

ウィザードに従って、以下の情報を入力していきます。

設定項目 設定値 設定項目の説明
ラベル plus91 管理ツールで管理するデータベースクラスタの識別名です。
ポート 5432 データベースの接続ポート番号です。
データベースディレクトリ /var/lib/pgsql/data データベースクラスタのディレクトリです。
バックアップディレクトリ /var/lib/pgsql/backups データベースのバックアップで使用されるディレクトリです。
文字エンコーディング UTF8 データベース側のデフォルトの文字エンコーディングです。
スーパーユーザ名 postgres データベースのスーパーユーザを指定します。
パスワード 任意 上記ユーザのパスワードを指定します。

ラベル、ポート、を入力して「進む(F)」をクリックします。

サーバを登録

データベースディレクトリと、バックアップディレクトリを入力します。

今回は /var/lib/pgsql ディレクトリ以下に作成します。

バックアップディレクトリには、PowerGres Plus の独自機能である、二重化されたトランザクションログが格納されます。また、アーカイブログや、データベースクラスタの物理バックアップ(ベースバックアップ)なども、バックアップディレクトリに格納されます。

サーバを登録

二重化されたトランザクションログ

PowerGres Plus では、データベースに関するバックアップを格納するディレクトリ(バックアップディレクトリ)を指定できます。このディレクトリには、PowerGres Plus の独自機能である二重化されたトランザクションログも格納されます。

トランザクションログとは、データベースの変更情報が格納されたバイナリファイルです。PowerGres Plus のベースとなっている PostgreSQL は、高速なアクセスと処理を実現するために、データベースの読み書きを共有メモリ上で行います。また、共有メモリ上の変更内容は直接データベースが配置されているディスクに書き込まれる前に、いったんトランザクションログとして出力され、ある程度トランザクションログが溜まったところでデータベース本体に書き込まれます。仮にサーバプロセスがクラッシュして、共有メモリ上のデータが消失したとしても、PostgreSQL はトランザクションログ利用することによって、データベースを障害直前の状態まで復旧することが可能です。

しかしながら、PostgreSQL は、トランザクションログを一箇所にしか作成しません。したがって、ディスク障害などによって使用中のトランザクションログが失われてしまうと、データベースの運用継続、復旧ができなくなってしまいます。そこで、PowerGres Plus では PostgreSQL に機能拡張を行い、データベースが使用しているトランザクションログと同一のファイルを別のディスクへ出力できるようになっています。

文字エンコーディングはデフォルトの UTF8 とします。スーパーユーザ名は postgres です。このスーパーユーザ名は、Linux のアカウントではありません。PowerGres Plus を通して管理するデータベースのスーパーユーザです。パスワードを入力して「進む(F)」をクリックします。

サーバを登録
サーバを登録

データベースクラスタの初期化が行われ、管理ツールへのデータベース登録が完了しました。

サーバを登録

データベースサーバの起動

登録したデータベースサーバを起動します。「サービス」をクリックし、「サービスを開始」をクリックします。

サーバの起動

正常にサービスが起動すると、「サービスを開始」がグレーアウトします。

サーバの起動

コマンドラインでデータベースのセットアップ

管理ツールを使ったデータベースのセットアップ手順を、コマンドラインのみで行ってみます。

データベースクラスタの初期化

データベースクラスタの初期化は、initdb コマンドを使います。initdb コマンドの主なオプションは以下の通りです。

オプション オプションの説明
--encoding データベース側のデフォルトの文字エンコーディングを指定します。
--no-locale ロケール機能を使用しません。Linux 環境では一般に指定した方がよいオプションです。
-D データベースクラスタのディレクトリを指定します。

[postgres@node1 ~]$ initdb --encoding=UTF8 --no-locale -D /var/lib/pgsql/data
データベースシステム内のファイルの所有者は"postgres"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。
:
:
または
    pg_ctl -D /var/lib/pgsql/data -l logfile start

[postgres@node1 ~]$ ls /var/lib/pgsql/data
PG_VERSION  global   pg_hba.conf    pg_multixact  pg_serial    pg_subtrans  pg_twophase  postgresql.conf
base        pg_clog  pg_ident.conf  pg_notify     pg_stat_tmp  pg_tblspc    pg_xlog


上記のようにメッセージが続き、データベースクラスタが作成されます。

バックアップディレクトリの作成と設定

トランザクションログの二重化と各種バックアップ機能を有効にするための作業です。空のバックアップディレクトリを作成します。

[postgres@node1 ~]$ mkdir /var/lib/pgsql/backups
[postgres@node1 ~]$ chmod 700 /var/lib/pgsql/backups
[postgres@node1 ~]$ ls -dl /var/lib/pgsql/backups
drwx------ 2 postgres postgres 4096  5月 13 15:01 /var/lib/pgsql/backups

また、postgresql.conf ファイルの編集を行います。以下の通りパラメータを変更します。postgresql.conf ファイルはデータベースクラスタディレクトリ内にあります。

wal_level = hot_standby
archive_mode = on
archive_command = '"/opt/powergresplus91/bin/pgx_xlogcopy.cmd" "%p" "/var/lib/pgsql/backups/archived_xlog/%f"'
backup_destination = '/var/lib/pgsql/backups'

パラメータの内容は以下の通りです。

パラメータ パラメータの説明
wal_level トランザクションログに出力する情報量を指定します。archive または hot_standby を指定します。
archive_mode アーカイブモードの有効化。
archive_command トランザクションログをアーカイブする際のコマンド。
backup_destination バックアップディレクトリを指定します。

archive_command には、PowerGres Plus 専用の pgx_xlogcopy.cmd を用います。archive_commandで設定されている %p は、コピー対象となる個々のトランザクションログファイルの絶対パスに置き換えられます。また、%f はファイル名のみに置き換えられます。アーカイブログの出力先は、バックアップディレクトリ配下の "archived_xlog" ディレクトリ内である点に注意してください。

データベースサーバの起動

データベースサーバの起動には、pg_ctl start コマンドを使います。また、pg_ctl status コマンドでデータベースサーバの起動状態を確認できます。-D オプションでデータベースクラスタのディレクトリを指定します。

[postgres@node1 ~]$ pg_ctl start -D /var/lib/pgsql/data
サーバは起動中です。
[postgres@node1 ~]$ pg_ctl status -D /var/lib/pgsql/data
pg_ctl: サーバが動作中です(PID: 23623)
/opt/powergresplus91/bin/postgres "-D" "/var/lib/pgsql/data"

基本的なデータベースの操作

PowerGresPlus を使ってデータベースを操作してみましょう。

データベースユーザの作成

データベースユーザを追加してみましょう。データベースのスーパーユーザである postgres でもデータベースを操作できますが、スーパーユーザはデータベースに関する全ての権限を所有しています。セキュリティや誤操作防止の観点から、通常の操作はスーパーユーザとは別に一般ユーザを作成し、そのユーザで操作を行うことをおすすめします。

データベースユーザは厳密には「ロール」と呼びます。ロールという概念は、ユーザとグループをまとめたものです。PowerGres ではログイン権限やデータベースオブジェクトへの各権限などをロール単位で設定します。

「オブジェクト」の「ロール」を見ると、ロールが確認できます。

データベースセットアップ直後は、データベースのスーパーユーザ postgres のみが作成されており、一般ユーザは作成していないので存在しません。

データベースの作成権限のある一般ユーザを作成しましょう。「ロールを作成」をクリックします。

ロールの追加

ロールの情報と権限は以下の通りとします。

ロール作成項目 設定値
ロール名 testuser
パスワード 任意
ログイン権限 あり
スーパーユーザ権限 なし
データベース作成権限 あり
ロール作成権限 なし
レプリケーション権限 なし

ロール名、パスワードを入力し、必要な権限にチェックを入れて「OK(O)」をクリックします。

ロールの追加

「オブジェクト」の「ロール」から testuser が追加されていることが確認できます。

ロールの追加

コマンドラインでロールを追加する

管理ツールを使ったロールの追加手順を、コマンドラインのみで行ってみます。

ロールの追加は、createuser コマンドを使います。createuser コマンドは対話的にロールを追加することができます。-P オプションを指定して追加したいロールにパスワードを設定します。引数に追加したいロール名を指定します。なお、ログイン権限は自動的に付与されます。

[postgres@node1 ~]$ createuser -P testuser
新しいロールのためのパスワード: # 任意のパスワードを入力
もう一度入力してください: # 任意のパスワードを入力
新しいロールをスーパーユーザにしますか? (y/n)n
新しいロールに対してデータベースを作成する権限を与えますか? (y/n)y
新しいロールに対して別のロールを作成する権限を与えますか? (y/n)n
パスワード: # postgres のパスワードを入力

データベースの作成

一般ユーザ testuser でデータベースを作成してみましょう。

データベースクラスタ /var/lib/pgsql/data 内のデータベースを見るには、「オブジェクト」の「データベース」をクリックします。

この時、3 つのデータベースが既に存在しています。これらは、データベースクラスタ初期化時(initdb 実行時)に自動的に作成されます。postgres が ロール、データベース作成などのユーティリティで PostgreSQL への接続を受け付けるデータベースで、template0, template1 がこれから作成するデータベースの雛型データベースとなります。

データベースの作成

「オブジェクト」の「データベースを作成」をクリックすると、データベースを作成する事ができます。ここでは以下のように設定します。

データベース作成項目 設定値
データベース名 testdb
データベース所有者 testuser
文字エンコーディング UTF8
テーブルスペース pg_default

データベース情報を入力して、「OK(O))」をクリックします。

データベースの作成

データベースが新たに追加されました。

データベースの作成

コマンドラインでデータベースを作成する

管理ツールを使ったデータベースの作成手順を、コマンドラインのみで行ってみます。データベースの追加は createdb コマンドを使います。-O オプションでデータベースの所有者を指定します。引数に作成したいデータベース名を指定します。

[postgres@node1 ~]$ createdb -O testuser testdb
パスワード: # postgres のパスワードを入力

psql によるデータベースへの接続

psql でデータベースに接続してみましょう。psql はデータベースに接続して SQL を実行するためのプログラムです。

「その他ツール」から「psql コマンドラインツールを実行」の「実行」をクリックします。

psql 接続

psql を起動すると、以下のターミナルが立ち上がります。

その際、パスワードの入力が求められます。サーバの登録時にデータベースのスーパーユーザ postgres に設定したパスワードを入力します。

psql 接続

psql のプロンプトでデータベースのスーパーユーザは =# 、一般ユーザは => で違いがあります。画面はスーパユーザが postgres データベースに接続している状態です。なお、終了する際は、\q を入力します。psql には SQL 以外にも psql 内のみで使える便利なバックスラッシュコマンド(メタコマンド)があります。主なバックスラッシュコマンドは、以下のとおりです。その他のバックスラッシュコマンドは、psql を使っていく中で紹介していきます。

主なバックスラッシュコマンド
コマンド意味
\?コマンド一覧
\c databasename [username]新しい接続で他のデータベースに接続。ユーザ名も付けるとそのユーザで接続
\h [SQL]SQL のヘルプ
\d[t|i|s|v|S]テーブル、インデックス、シーケンス、システムテーブルの一覧
\lデータベース一覧
\d [NAME]指定したテーブル、インデックス、シーケンスなどの定義を表示
\dTデータ型の一覧
\df関数の一覧

まずは \l コマンドでデータベース一覧を確認してみましょう。管理ツールで作成した testdb が一覧に表示されています。また、\du コマンドでロールの一覧も確認してみましょう。管理ツールで作成した testuser が一覧に表示されています。

続けて、\c コマンド を使って 先ほど作成したデータベース testdb に接続してみましょう。その後、SET ROLE 文でロールをスーパーユーザ postgres から、一般ユーザ用のロール testuser に変えてみましょう。RESET ROLE で元のロールであるスーパーユーザ postgres に戻れます。

psql 接続

コマンドラインから psql でデータベースへ接続する

管理ツールからではなく、コマンドラインから psql を起動してデータベースに接続してみましょう。コマンドは psql コマンドを使います。-d オプションで 接続するデータベースを指定します。-U オプションでデータベースへ接続するロールを指定します。-p オプションで接続ポートを指定します。

なお、-U オプションと -d オプションの値は、オプションとして指定せずに、psql コマンドの第一引数と第二引数に接続先データベースと接続ロールを指定することもできます。

以下の例では、Linux ユーザの postgres が ロールの testuser として、testdb に接続しています。

[postgres@node1 ~]$ psql -d testdb -p 5432 -U testuser
ユーザ testuser のパスワード: # testuser のパスワードを入力
psql (9.1.9)
"help" でヘルプを表示します.

testdb=>

SQL の実行

psql 上で、SQL を実行し、簡単なテーブルを作成してみましょう。ここでは、社員テーブル employee を作成します。下の CREATE TABLE 文で 4 つのカラムを持ったテーブルを定義しています。

CREATE TABLE employee (
  number int,         -- 社員番号
  name text,          -- 名前
  position text,      -- 役職
  date_of_hire date   -- 入社日
);

SQL

\demployee テーブルを確認してみましょう。

\d employee

SQL

SQL の基本となる 4つの構文 INSERT, SELECT, UPDATE, DELETE をそれぞれ実行して、データの投入から削除まで行います。

社員テーブル employee が定義できたら、INSERT 文で以下のデータを登録していきましょう。

INSERT INTO employee VALUES (1981352, '吉本 勘兵衛', 'staff', '1998-04-01');
INSERT INTO employee VALUES (1782822, '長崎 一郎', 'chief', '1978-10-01');
INSERT INTO employee VALUES (2081577, '山田 太郎', 'staff', '2008-04-01');
INSERT INTO employee VALUES (1851139, '大村 祐子', 'chief', '1985-04-01');

テーブルへのデータの登録が済んだら、 SELECT 文で確認してみましょう。

SELECT * FROM employee;

SQL

UPDATE 文でデータの更新を行いましょう。社員番号 1981352 の吉本さんの役職が、マネージャ(manager)に昇進したと仮定して、データの更新を行っていきます。注意しなければならないのは、WHERE 句で条件を指定しないとすべての行が更新されてしまいます。吉本さんの社員番号を条件に指定しています。

UPDATE employee SET position = 'manager' WHERE number = 1981352;

SQL

DELETE 文で削除を行いましょう。社員番号 1851139 の大村さんが退職したと仮定して。データの削除を行います。こちらも、UPDATE 文の時と同じように WHERE 句で条件を絞りこんでから削除をします。

DELETE FROM employee WHERE number = 1851139;

SQL

SELECT 文で確認してみましょう。

SELECT * FROM employee;

SQL
吉本さんが manager へ、大村さんが削除されている事がわかります。

SQL 基本 4 構文
データの操作SQL構文例
登録INSERT 文INSERT INTO employee VALUES (1981352, '吉本 勘兵衛', 'staff', '1998-04-01');
検索SELECT 文SELECT name FROM employee;
更新UPDATE 文UPDATE employee SET position = 'manager' WHERE number = 1981352;
削除DELECT 文DELETE FROM employee WHERE number = 1851139;

次回予告

今回は PowerGres Plus の導入方法と基本的な使い方を紹介しました。

次回は、オンラインバックアップとそのリカバリ方法をご紹介いたします。通常の PostgreSQL では復旧が不可能な場合でも、PowerGres Plus では、独自機能のトランザクションログの二重化を利用して、簡単に復旧可能です。いくつかの障害パターンをもとに、「PostgreSQL ではできなくて PowerGres Plus ではできること」をメインテーマに、体験記をお送りいたします。