Linux での Pervasive PSQL の使用
 
このページをシェアする                  
Linux での Pervasive PSQL の使用
Linux で本製品を使った作業
この章では、以下の項目について説明します。
必要な情報の参照
Linux での Pervasive PSQL のアカウント管理
設定
クライアント情報
Web ベースのデータベース アクセスの設定
Pervasive PSQL における Perl および ODBC の使用
必要な情報の参照
ユーザー マニュアルへのアクセス
ドキュメントにアクセスする方法は?を参照してください。
man page
man page は Pervasive PSQL Server または Client のインストール時に一緒にインストールされます。man page を使用可能にするには $PVSW_ROOT/man/man1 ディレクトリを参照してください。
man page へ簡単にアクセスできるようにするには、MANPATH 環境変数に $PVSW_ROOT/man を追加します。特定のユーティリティまたはアプリケーションについての詳細は、『Pervasive PSQL User's Guide』のコマンド ライン インターフェイス ユーティリティの章を参照してください。
メモ: 最新情報については、man page を調べてください。本マニュアルの情報と man page の情報は一致するように最善の努力を尽くしています。しかし、本マニュアルの発行後に行われた最終変更が man page に含まれている場合があります。
Linux での Pervasive PSQL のアカウント管理
ここでは、Pervasive PSQL の操作で必要となる Linux ユーザー アカウントの情報について説明します。
インストール後の動作
psql ユーザーにはパスワードがありません。su コマンドを使用することによって root アカウントでのアクセスのみを行うことができます。
~psql/.bash_profile を使ってユーザー psql 用の .bash_profile にアクセスできます。
すべての Pervasive ファイルの "ユーザー:グループ" 所有権を "psql:pvsw" に設定します。
Pervasive PSQL エンジンへのスクリプトを実行および停止するには、root でログインする必要があります。
psql 以外のユーザーからのユーティリティの使用で説明しているように、ユーザーの .bash_profile またはシステムの /etc/profile に必要な環境変数を追加した場合は、root 以外のユーザー アカウントでもユーティリティを実行することができます。
psql 以外のユーザーからのユーティリティの使用で説明されている手順に加え、root 以外のユーザーが以下のユーティリティで機能を実行するには、pvsw グループのメンバーになる必要があります。
Pervasive PSQL Control Center (PCC):ローカル サーバーを管理する
License Administrator ユーティリティ(clilcadm):現在のライセンスの表示以外の機能を使用する
名前付きデータベース Maintenance ユーティティ(dbmaint):現在のデータベース表示以外の機能を使用する
Pervasive サービス レジストリ エディター(psregedit):レジストリの表示以外の機能を使用する
Linux コマンドライン設定(bcfg)
ユーザー環境
環境変数 $PVSW_ROOT を使用してインストール済みコンポーネントのロケーションが判別されます。構成ファイルの一般的なロケーションは $PVSW_ROOT/etc です。実行可能ファイル場合、そのロケーションは $PVSW_ROOT/bin です。共有ライブラリ(32 ビット)の場合のロケーションは $PVSW_ROOT/lib、共有ライブラリ(64 ビット)の場合のロケーションは $PVSW_ROOT/lib64 です。
次のセクションで説明しているように、PATH 環境変数に $PVSW_ROOT/bin を追加し、LD_LIBRARY_PATH$PVSW_ROOT/lib を追加することをお勧めします。
psql 以外のユーザーからのユーティリティの使用
psql 以外のユーザー アカウントからユーティリティを使用するには、まずユーザー アカウントの設定を変更する必要があります。特定のユーザーのプロファイル、あるいは全ユーザーが継承するプロファイルに以下のような変更を加えてください。
/home/username/.bash_profile
ユーザーのプロファイル。/etc/profile ファイルと似ていますが、現在のユーザーにのみ適用するファイルです。
/home/username でこのファイルを探します。
/etc/profile
システム上の全ユーザー アカウント用のデフォルト プロファイル。マシン上の全ユーザー アカウントが Pervasive PSQL ユーティリティへアクセスできるようにするには、以下の行をこのテキスト ファイルにコピーします。
これはユーザーに対して Pervasive PSQL データへの管理権限やアクセス権を与えるものではありません。
これは変更されたプロファイルの例です。
PVSW_ROOT=/usr/local/psql
PATH=$PATH:$PVSW_ROOT/bin:/bin:/usr/bin
LD_LIBRARY_PATH=$PVSW_ROOT/lib:$PVSW_ROOT/bin:/usr/lib
MANPATH=$MANPATH:$PVSW_ROOT/man
 
Pervasive PSQL に関連するすべての変数を必ずエクスポートするようにしてください。
設定
一般的に、Pervasive PSQL Server と Client のデフォルト構成はそのまま使用しても問題はありません。通常、データベース エンジンとクライアントの通信や機能について構成を行う必要はありません。ここでは、変更を行う可能性のある 2 つの構成について説明します。
構成ファイル
認証(Authentication)
すべての構成を調査する場合は、『Advanced Operations Guide』の設定リファレンスを参照してください。
構成ファイル
サーバーの構成を行う「構成ファイル」では Samba の構成ファイル(smb.conf)のパスを定義します。パスはエンジンの起動時に解析され、共有名とサーバーのディレクトリ ロケーションの間の割り当てが判別されます。『Advanced Operations Guide』のConfiguration File(Linux エンジンのみ)を参照してください。
認証(Authentication)
このオプションは、サーバー エンジンへのアクセスに使用する認証のタイプを指定します。使用可能なオプションは次のとおりです。
Emulate Workgroup Engine。Samba を使用してシステムのユーザー アクセスを認証する場合、この値を使用します。
Proprietary Authentication(using btpasswd)(専用認証(btpasswd の使用))。Samba を使用せず、ユーザーがサーバーにアカウントを持っていない場合、この値を使用します。Linux システムへの接続に個別のパスワード ファイルを使用できます。
Linux サーバーで BTPASSWD または PAM の認証を使用する場合、pvnetpass 使用してクライアントからこのサーバーに接続するユーザー名とパスワードを設定する必要があります。『Pervasive PSQL User's Guide』の pvnetpass を参照してください。
Standard Linux Authentication(標準 Linux 認証)。Samba を使用せず、ユーザーが Linux システムにアカウントを持っている場合、この値を使用します。
Samba 用にサポートされるパスの形式
Windows プラットフォームの Pervasive PSQL Client からのパスの解析順序は次のようになります。
\\server\share\relative_path(相対パス)
share は、Windows クライアントにアクセスを許可された、有効な Samba 共有を表します。
server は smb.conf を読み込んで共有ディレクトリの絶対パスを判別し、それを相対パスと結合して Unix のフル パスを完成します。smb.conf のロケーションは、クライアントでこの形式で提供されるファイル パスの解決を有効にするために不可欠です。相対パスが間違っている場合、ステータス 12 が返されます。
Drive:\path
Drive は、クライアントで割り当てられた、Samba のドライブです。サーバーでは、クライアントでのドライブ割り当てがわからないので、クライアントがこれを後の形式に変換し、サーバーに渡す必要があります。
メモ: クライアントのユーザーは、Linux サーバーの共有名で大文字小文字が区別されることに注意する必要があります。Linux サーバーにドライブを割り当てるときは、共有名の大文字小文字に注意してください。大文字小文字を間違えると、すべてのユーティリティが正しく機能しません。
smb.conf と共有名のいずれも見つからなかった場合、パスはデフォルトで \\server\absolute_path(絶対パス)形式になります。絶対パスが間違っている場合、ステータス 12 が返されます。
クライアント情報
クライアントとサーバー コンピューターが 1 つの共有プロトコルによって通信できれば、Linux 上の Pervasive PSQL Client は、どの Pervasive PSQL Server へも接続できます。
リモート マシンへの認証
Linux クライアントを使ってリモート マシンに接続するには、そのリモート マシンへの認証が必要です。認証を行うには pvnetpass ユーティリティでサーバーへの特定のユーザー名とパスワードを入力します。このユーティリティでは、クライアント マシンにある Pervasive レジストリ内で特定のサーバーへのユーザー名とパスワードを暗号化形式で保存します。ユーザー名とパスワードを指定しない場合は、アプリケーションでステータス コード 3119 を受け取ります。
Pervasive PSQL User's Guide』の pvnetpass を参照してください。
クライアント DSN の作成
クライアント上のアプリケーションが ODBC 経由で Pervasive PSQL リレーショナル インターフェイスを使用する場合は、クライアントのデータ ソース名(DSN)が必要です。クライアント DSN を作成するには、Linux 用の Pervasive PSQL Client に含まれている dsnadd ユーティリティを使用します。『Pervasive PSQL User's Guide』のdsnaddおよび/usr/local/psql/man/man1 にある man page で「dsnadd」を参照してください。
Web ベースのデータベース アクセスの設定
ここでは、Linux の Web アプリケーションから Pervasive PSQL データにアクセスするための Web サーバーの構成情報、また、その Pervasive PSQL データに接続するための接続用コードの抜粋やサンプル コードを提供します。
ODBC の動作
Pervasive PSQL を最初にインストールしたとき、odbc.ini ファイル は /usr/local/psql/etc に書き込まれます。
unixODBC などの別の ODBC ドライバー マネージャーがあった場合、これらのドライバー マネージャーは /etc/odbc.ini といった別の場所にある odbc.ini を使用している可能性があります。
ODBC セットアップを統一するには、unixODBC が使用する odbc.ini ファイルのロケーションのソフト リンクを Pervasive PSQL ディレクトリに追加するという方法があります。
su
cd /etc
ln -s /usr/local/psql/etc/odbc.ini
Web サーバーの構成
ここでは、Apache などの Web サーバーが搭載されているマシンを設定する方法について説明します。
Apache などの Web サーバーを起動するユーザー アカウントは pvsw グループのメンバーに属していなければなりません。これらのユーザー アカウントは nobody などの制限付きアカウントに基づいて実行します。
ユーザー アカウントを探す場合は Apache 構成ファイルを見てください。これは通常 /etc/httpd/conf/httpd.conf にあります。
このファイルの以下の行では、Apache サーバーを使用して操作するユーザーを示します。
User nobody
Group nobody
Options ExecCgi Indexes
このユーザーを pvsw グループに追加し、お使いの Apache 構成ファイルで使用している名前に置き換えます。
/usr/bin/gpasswd -a nobody pvsw
PHP
PHP では Microsoft の ASP や Java の JSP に類似したスタイルを使用して Web アプリケーションの開発を簡単に行うことができます。PHP の使用は HTML でデータベース呼び出しを特殊なタグで囲み、出力を書式設定します。
Pervasive PSQL PHP の要件
PHP - http://www.php.net から入手します。
データベースを指す DSN(dsnadd を使用)
PHP の接続用コードの一部
このコード部分は PHP を使って Pervasive PSQL データベースに接続する基本的な部分です。
// ユーザー ID、パスワードなしで DEMODATA データベースに接続する
$connect = odbc_connect("demodata", "", "");
 
// クエリ変数を SQL に設定する
$query = "SELECT * from Department";
 
// クエリの結果オブジェクトを取得する
$result = odbc_exec($connect, $query);
PHP サンプル
以下に示す完全なサンプルでは、ユーザーが DEMODATA の 3 つのテーブルから 1 つを選択し、そのテーブルを表示します。
<HTML>
<HEAD>
<TITLE>PVSW PHP サンプル</TITLE>
</HEAD>
<BODY>
 
<H1>Pervasive Hello World サンプル - PHP ODBC API を使用した PHP)</H1>
<P>
このサンプルでは PHP を使用して下記のドロップダウン リストにある DEMODATA データベースのテーブルを表示します。
</p>
 
<?
 
// -------メイン メニュー-----------------------
 
// URL 内に指定された機能がない場合
 
 
if (!(isset ($HTTP_GET_VARS["_function"]))):
 
// --------------------------------------------
 
?>
 
<p>以下のテーブルから選択してください。</p>
<form method=post action='<?=$PHP_SELF?>?_function=showtable'>
<select name="selecttable">
<option SELECTED value="Department">Department
<option value="Course">Course
<option value="Room">Room
</select>
 
<p>
<input type=submit value="テーブルの表示">
</p>
</form>
 
<?
 
// ------テーブルの表示-------------------------
 
Elseif ($HTTP_GET_VARS["_function"] == "showtable"):
 
// --------------------------------------------
 
print("<p><a href='$PHP_SELF'>サンプル 1 メイン メニュー</a>に戻る</p>");
 
$thetable = $HTTP_POST_VARS["selecttable"];
// フォームのデータから開くテーブルを決定する
 
$connect = odbc_connect("demodata", "", "");
// ユーザー ID、パスワードなしで DEMODATA データベースに接続する
$query = "SELECT * from $thetable";
// 実行する SQL に含めるクエリ変数を設定する
$result = odbc_exec($connect, $query);
// クエリを実行する
 
// 結果セット全体を HTML テーブルとして出力する
//(以下の行のコメントを解除します)
// odbc_result_all($result);
 
// あるいは、出力を自分で独自に書式設定し、
// より見やすいテーブルを表示する(ただし、より多くのコード作成が必要)
 
// 行カウンターを初期化する
$i = 0;
 
// 列数を決定する
$numcols = odbc_num_fields($result);
 
// HTML テーブルを開始する
print("<table border=1 cellpadding=5>");
 
 
 
 
// 列見出しの印刷
 
print("<tr>"); // 行の開始
 
while ($i < $numcols)
{
$i++;
$colname = odbc_field_name($result, $i);
print("<th>$colname</th>");
}
$i=0;
 
print("</tr>"); // 行の終了
 
// テーブル データの出力
 
// 行が存在する限り実行
while(odbc_fetch_row($result))
{
print("<tr>"); // 行の開始
 
while ($i < $numcols)
{
$i++;
$tablecell = odbc_result($result, $i);
print("<td>$tablecell</td>");
}
 
print("</tr>"); // 行の終了
$i = 0; // カウンターのリセット
 
} // odbc フェッチ行の終了
 
print("</table>"); // HTML テーブルの終了
 
odbc_close($connect); // 接続を閉じる
 
// テーブル表示の終了
 
// ---無効なメニュー オプションの取得----------------
 
Else:
 
// ----------------------------------------------
 
print("<p>無効な機能が入力されました。<a href='$PHP_SELF'>再試行</a>してください。</p>");
 
 
Endif;
 
?>
</BODY>
</HTML>
PHP のその他のサンプル
より一般的な PHP サンプル アプリケーションが Pervasive Software の Web サイトからオンラインで入手することができます。このアプリケーションではビデオ店の操作をシミュレートします。
このサンプルは Pervasive PSQL SDK に含まれている Pvideo データベースを使用しています。SDK をインストールしていない場合は、サンプル アプリケーションと一緒にこの Pvideo データベースをダウンロードすることができます。
Perl
Perl は Pervasive PSQL を使ったコマンド ラインおよび Web ベースのアプリケーションの両方に使用できます。
Pervasive PSQL Perl の要件
Perl
ODBC-DBD ライブラリ
CGI ライブラリ
データベースを指す DSN
Perl の接続用コードの一部
このコード部分は Perl を使って Pervasive PSQL データベースに接続する基本的な部分です。
# Perl のデータベース インターフェイス(DBI)の使用を指定する
use DBI;
 
# ユーザー ID、パスワードなしで DEMODATA データベースに接続する
$dbInfo = "DBI:ODBC:DEMODATA";
$dbUserName = "";
$dbPassword = "";
 
# クエリ変数を SQL に設定する
$query = "SELECT * FROM Department";
 
# サーバーへ接続する
$connect = DBI->connect($dbInfo, $dbUserName, $dbPassword);
 
# SQL クエリを準備する
$myRecordSet = $connect->prepare($query);
 
# クエリを実行してレコードセットを取得する
$myRecordSet->execute();
 
Perl のサンプル
以下に示す完全なサンプルでは、ユーザーが DEMODATA の 3 つのテーブルから 1 つを選択し、そのテーブルを表示します。
 
# Perl のサンプル
 
use CGI":cgi-lib";
$cgiquery = new CGI;
 
$functionreq = $cgiquery->url_param('_function');
# GET の場合は 'url_param' を、POST の場合は 'param' を使用する
 
print &PrintHeader;
print &HtmlTop("Pervasive PSQL Hello World サンプル - Perl");
 
print <<ENDOFMENU;
<H1>Pervasive Hello World サンプル - Perl</H1>
 
<P>
このサンプルでは Perl/DBI を使用して下記のドロップダウン リストにある DEMODATA データベースのテーブルを表示します。
</p>
ENDOFMENU
 
# -----メイン メニュー--------------------
 
# URL 内に指定された機能がない場合
 
if (!$functionreq) {
 
# ---------------------------------------
 
print <<ENDOFTEXT;
 
<p>以下のテーブルから選択してください。</p>
<form method=post action="$ENV{'SCRIPT_NAME'}?_function=showtable">
<select name="selecttable">
<option SELECTED value="Department">Department
<option value="Course">Course
<option value="Room">Room
</select>
<p>
<input type=submit value="テーブルの表示">
</p>
</form>
 
ENDOFTEXT
} # !($function)
 
# ------テーブル表示-------------------------------
 
elsif ($functionreq eq "showtable") {
 
print("<p>Return to <a href='$ENV{'SCRIPT_NAME'}'>Perl Hello World サンプル - メイン メニュー</a><に戻る/p>");
 
 
# フォームのデータから開くテーブルを決定する
$thetable = $cgiquery->param('selecttable');
 
use DBI;
 
$dbInfo = "DBI:ODBC:DEMODATA";
$dbUserName = "";
$dbPassword = "";
 
$query = "SELECT * FROM $thetable";
$connect = DBI->connect($dbInfo, $dbUserName, $dbPassword);
 
$myRecordSet = $connect->prepare($query);
$myRecordSet->execute();
 
# HTML テーブルを開始する
print "<table border=1 cellpadding=5>";
 
# 列見出しの印刷
 
$num_fields = $myRecordSet->{NUM_OF_FIELDS};
$count = 0;
 
print "<tr >";
while ($count < $num_fields) {
$column_name = $myRecordSet->{NAME}->[$count];
print "<th>$column_name</th>";
$count++;
}
print "</tr>\n";
 
$count = 0;
 
# テーブル データの出力
 
while(@row=$myRecordSet->fetchrow_array) {
print "<tr>\n";
while ($count < $num_fields) {
print "<td>$row[$count]</td>\n";
$count++;
}
print "</tr>\n";
$count = 0;
}
 
print "</table>"; # HTML テーブルの終了
# テーブル表示の終了
}
 
# -----無効なメニュー オプションの取得----------------
 
else {
 
print "<p>無効な機能が入力されました。<a href='$ENV{'SCRIPT_NAME'}'>再試行</a>してください。</p>";
 
}
 
print &HtmlBot;
Pervasive PSQL における Perl および ODBC の使用
メモ: この手順は、Pervasive PSQL v11 SP3、Perl および ODBC ディストリビューションがインストールされていることを前提にしています。http://www.iODBC.org で ODBC のフリー バージョンを入手することができます。Perl については http://www.perl.org をご覧ください。
Pervasive PSQL を Perl の ODBC インターフェイスで動作させるには
1 Perl をサポートする DBI(データベース インターフェイス)をダウンロードします。
手順については、Readme ファイルまたは INSTALL ファイルを参照してください。
2 Perl 用の ODBC DBD データベース ドライバーをダウンロードします。
Readme または INSTALL ファイルでインストール手順を参照してください。
3 次の例で示すように、適切な環境変数を設定してください。これは iODBC のドキュメントでも説明されています。
Perl および DBI 用のコードの一部
print "using odbc...\n";
use DBI;
$dbName = "DBI:ODBC:DEMODATA";
$dbUserName = "";
$dbPassword = "";
print "connecting...\n";
$sql = "SELECT * FROM class";
$dbh = DBI->connect($dbName, $dbUserName, $dbPassword);
$dataObject = $dbh->prepare($sql);
$dataObject->execute();
while(@row=$dataObject->fetchrow_array)
{
print "$row[0]\t$row[1]\t$row[2]\n\n"
}