Red Hat 7.3付属のPostgreSQL 7.2.1環境(unixODBC,JDBC他)
VMware Workstation 3.2 for Windows上で動作させているRed Hat 7.3でPostgreSQLを使用してみました。
StarOffice 6.0におけるunixODBC/JDBC経由でのPostgreSQLデータベースの利用やWindowsアプリとのODBC連携を中心にPostgreSQLの活用例を紹介します。
1.PostgreSQLのソフトウェア環境
Red Hat 7.3にはPostgreSQL関連の各種パッケージ(postgresql-server, postgresql, postgresql-odbc, postgresql-jdbc 等)が付属しています。
- PostgreSQL
Red Hat 7.3付属のPostgreSQLのバージョンは7.2.1です(psqlも7.2.1)。
/usr/binには次のようなPostgreSQL関連の実行ファイルが格納されています。
initdb
postmaster
psql
pgaccess(これはpostgresql-tkパッケージに含まれています)
pg_ctl
createuser 等
- ODBC for PostgreSQL
Red Hat 7.3付属のPostgreSQL用ODBCドライバです。
- Windows用PostgreSQL ODBC Driver
今回使用したものはPostgreSQL ODBC Driver 07.01.0006です。
- PostgreSQL用JDBCドライバ
Red Hat 7.3にはpostgresql-jdbcパッケージが付属しており次のjarファイルが含まれています。
jdbc7.1-1.1.jar(JDBCアプレットの動作確認ではこれを使用)
jdbc7.1-1.2.jar
jdbc7.2dev-1.1.jar
jdbc7.2dev-1.2.jar(StarOffice連携ではこれを使用)
- サンプルデータベース/テーブル
今回は下記の書籍で紹介されているサンプルデータベース/テーブル定義(msglistテーブル)を使用させて戴きました。出版社にお礼を申し上げます。
参考図書:「PHP+RDBMS Webサーバーでのデータベース活用術」(エーアイ出版:2002年3月20日発行版)
尚、PHPスクリプトについても上記書籍で紹介されているものを参考にさせて戴きました。
本Webサイトでは上記書籍で紹介されていないStarOfficeとの連携(unixODBC/JDBC連携),Windowsアプリとの連携などを中心に説明しています。
2.動作環境
- postgresユーザについて
Red Hat 7.3の初期状態ではpostgresユーザ(postgresグループ)はデフォルトで登録されています。
postgresユーザのホームディレクトリは/var/lib/pgsqlとなっています。
postgresユーザのホームディレクトリにある.bash_profileではPGDATA環境変数の値が/var/lib/pgsql/dataとして設定されており今回これはそのまま使用します。
尚、postgresユーザのパスワードは「passwd postgres」コマンドで適当に設定しておきます。
- postgresqlサービス設定
今回PostgreSQLデーベースサーバ(postmaster)はユーザプロセスとしてシステムブート時に自動起動させるということで「postgresqlサービスの自動起動設定はoff」のままです。
- Apache用環境設定ファイル
httpd.confの変更は特にありません。
但しServerNameだけは追加設定されているものとします。
3.データベースの初期化とサンプルデータベースの作成
- postgresユーザでログイン
- データベースの初期化
データベースの初期化は「initdb -E EUC_JP」コマンドで行います。
(-E EUC_JPは日本語のエンコーデング方法の設定ですが念のため指定しています)
本コマンドを実行するといろいろなメッセージが表示され、$PGDATA(/var/lib/pgsql/data)に以下のものが作成されます。
PG_VERSION
base
global
pg_clog
pg_hba.conf
pg_ident.conf
pg_xlog
postgresql.conf
- クライアント認証ファイルの変更
クライアント認証ファイル(pg_hba.conf)に以下の行を追加します(テスト用に全てのデータベースに対して任意のホストからTCP/IPでの接続を許可するための大胆な設定です)。
host all 0.0.0.0 0.0.0.0 trust
- データベースサーバの起動
「postmaster -i」でPostgreSQLデータベースサーバを起動します。
-iオプションはTCP/IP接続の受け入れオプションです。
- サンプルデータベースの作成
サンプルデータベース名をmydbとするため「createdb mydb」コマンドを実行します。
「plsql -l」でmydbが作成されたことを確認します。他にtemplate0,template1も作成されています。
これらのデータベースの所有者はすべてpostgresでエンコーディンの設定はEUC_JPになっています。
ちなみに$PGDATA/baseの中には以下のものが作成されています。
1
16555
16556(これがmydbに該当するものです)
4.PostgreSQLサーバの自動起動設定
- /etc/rc.d/rc.localの変更
rootユーザで/etc/rc.d/rc.localファイルに次の行を追加します。
su -c '/usr/bin/postmaster -D /var/lib/pgsql/data -i &' postgres
- Red Hatの再起動
- postmasterプロセスの確認
gtopでpostmasterがpostgresユーザで動作していることが確認できます。
5.サンプルテーブルの作成
- postgresユーザでログイン
ログイン後以下のコマンドを実行します。
mkdir public_html
chmod go+rx .
public_htmlはhttp://マシン名/~postgres/xxxで個人用ホームページを公開させるようにするためのものです。
- テーブル定義用SQLの実行準備
まず上記書籍付属のCD-ROMに入っているmakebbs.sql, ibbs.ini, ibbs.php3をpublic_htmlにコピーし更新できるように設定しておきます。
makebbs.sql中の不要なものは削除しておきます。
- テーブル定義用SQLの実行
「psql -f makebbs.sql mydb」コマンドでサンプルテーブル(msglist)を作成します。
6.サンプルテーブルへのデータ登録
psqlでINSERT文を直接使用してサンプルテーブルにデータ登録することもできますが面倒ですのでサンプルのPHPスクリプトを使ってWebブラウザからデータ登録します。
- PostgreSQLへのapacheユーザの登録
Apache環境でサンプルテーブルをアクセスするPHPスクリプトを実行させるにはPostgreSQLにapacheユーザを登録し、サンプルテーブルへのアクセス権を設定しておく必要があります。
(gtopで確認できますがhttpdはapacheユーザで動作しています)
- apacheユーザの作成
postgresユーザで「createuser apache」を実行します。
- apacheユーザへのアクセス権の設定
psql mydb
grant all on msglist to apache;
grant all on msglist_id_seq to apache;
- PHPスクリプトの変更(任意)
サンプルのPHPスクリプトは簡単な掲示板の例ですが発言にレスが付いた時にwebmasterからレスが付いた旨のメールが自動送信される便利な機能が盛り込まれています。
この機能を有効にするためにはまずibbs.ini中の「$debug = TRUE」を「$debug = FALSE」に変更します。
またibbs.php3中のwebmaster(メール発信元)のメールアドレスを適切なものに変更しておきます。
レスが付いた旨を知らせるメールの受信例。
- Webブラウザからのデータ登録
適当なWebブラウザからhttp://マシン名/~postgres/ibbs.php3で掲示板のページを表示してデータを入力して<投稿する>ボタンを押すとmsglistテーブルにデータが登録されます。
- テーブル内のデータ確認
- psqlによる確認
postgresユーザで次のような操作でテーブル内容を確認できます。
psql mydb
select * from msglist;
また他のユーザ(例えばroot)についても「createuser root」でPostgreSQLのrootユーザを作成し、、「grant all on msglist to root;」、「grant all on msglist_id_seq to root;」を実行しておけばrootユーザによるPostgreSQLデータベースアクセスも行えます。
- pgaccess(PostgreSQLのGUIクライアント:MS-Accessっぽいものです)
pgaccess mydb
テーブル一覧の中の「msglist」を選択して「open」ボタンを押すとテーブル内のデータが表示されます。
pgaccessの「Query builder」の「Visual designer」を使うとクエリー定義のGUI作成及びその場でのクエリー実行ができます。
以下、データ登録されたmsglistをunixODBCやJDBC等でアクセスする例を紹介します。
7.unixODBCの利用によるStarSuite 6.0でのPostgreSQL ODBCアクセス
- PostgreSQL ODBC データソースの登録
- rootユーザでODBCConfigの起動
GNOMEメニューの[プログラム]-[システム]-[ODBCConfig]で起動することもできます。
- 「ODBC Data Source Administrator」画面が出ます。
- 「System DSN」タブで<Add>ボタンを押します。
- 「PostgreSQL ドライバ」を選択して<Configure>ボタンを押します。
- ODBCドライバ情報を指定します。
ほとんどデフォルトの値で構いません。
データソース名は「PostgreSQL」とします。
- <Save and Exit>ボタンを押します。
- 「Data Source Properties」画面で各種の設定を行います。
ここもほとんどデフォルト値のままで構いませんが以下の情報を設定します。
Name:pg_mydb_odbc
Database:mydb
Username:postgres
Password:なし
<OK>ボタンでODBCデータソースが登録されたことが確認できます。
- 「DataManager」でのODBCデータソースのテーブル確認
GNOMEメニューの[プログラム]-[システム]-[DataManager]でDataManagerを起動し、ODBCデータソース内のテーブル定義情報を確認できます。
- StarSuiteへのODBCデータソース登録
- StarSuiteの表計算を起動します。
- [ツール]-[データソース]で<新しいデータソース>ボタンを押します。
- 「全般」タブで下記を設定します。
名前:PostgreSQL_mydb
データベースの種類:ODBCを選択
データソースURL:「ODBC Data Source Administrator」で登録したpg_mydb_odbcを選択します。
- 「ODBC」タブで下記を設定します。
ユーザ名:postgres
<パスワードが必要>:off
ドライバの設定:なし
- <適用>ボタンで設定を有効にします。
- 表計算の[表示]-[データソース]を実行するとStarSuiteに登録したODBCデータソースPostgreSQL_mydbが表示されます。
PostgreSQL_mydbのテーブルをダブルクリックするとテーブル一覧が表示され、msglistテーブルをダブルクリックするとテーブル内容が右側に表示されます。
(データの更新もそこでできます)
またデータソース中のmsglistを表計算側のシートにドラッグするとそのシートにテーブルデータが表示されます。
8.isqlツールによるODBCデータソースアクセス
unixODBCにはisqlという対話式SQL実行ツールが付属しています。
コマンドラインからisqlでPostgreSQLのODBCデータソースをアクセスしてみました。
9.WindowsからのRed Hat内PostgreSQLのODBCアクセス
Windows用PostgreSQL ODBCドライバを導入するとWindowsアプリケーションからRed Hat内のPostgreSQLデータベースをアクセス(更新含)できます。
10.StarSuiteからのPostgreSQL JDBCアクセス
Red Hat 7.3にはPostgreSQLのJDBCドライバパッケージが標準で付属しています。
そのJDBCドライバを使用するとStarSuiteからJDBCでPostgreSQLをアクセスできます。
- StarSuiteの表計算起動。
- [ツール]-[オプション]でStarSuiteの「セキュリティ」画面を開きます。
ClassPathとして/usr/share/pgsql/jdbc7.2dev-1.2.jarを選択します。
当方のRed Hat 7.3環境ではStarSuiteに対してJDK 1.4.0を組み込んでいますが、他のjdbcのjarファイル指定ではテーブルの内容表示で次のエラーとなりました。
- 表計算の[ツール]-[データソース]で<新しいデータソース>ボタンを押します。
- 「全般」タブで下記を設定します。
名前:PostgreSQL_mydb_JDBC
データベースの種類:JDBCを選択
データソースURL:jdbc:postgres:mydbを指定します。
- 「JDBC」タブで下記を設定します。
JDBCドライバクラス:org.postgresql.Driver
ユーザ名:postgres
<パスワードが必要>:on(PostgreSQLの場合これのonは必須です)
- <適用>ボタンで設定を有効にします。
- 表計算の[表示]-[データソース]を実行するとStarSuiteに登録したデータソースPostgreSQL_mydb_JDBCが表示されます。
PostgreSQL_mydb_JDBCのテーブルをダブルクリックするとユーザ名とパスワードの入力画面(ログイン画面)が出ます。
認証が完了するとJDBCデータソース内のテーブル一覧が表示され、msglistテーブルをダブルクリックするとテーブル内容が右側に表示されます。
またJDBCデータソース中のmsglistを表計算側のシートにドラッグするとそのシートにテーブルデータが表示されます。
データソースの定義方法はODBCとJDBCで異なりますがデータソース定義後の操作方法はほとんど違いがありません(但しJDBCではログインが必須)。
11.PostgreSQL JDBCアプレット(テーブルの検索アプレット例)
PostgreSQLのJDBCを利用したJava Appletを試作してみました。
- postgresユーザのJAVA環境変数の設定
postgresユーザの.bash_profileにJAVA_HOMEとJAVA_CLASSを設定します。
尚、PATHには$JAVA_HOME/binを追加しておきます。
環境変数設定後はその環境変数設定を有効にします。
- Javaソースの準備
まず/var/lib/pgsql/public_html内にjdbc7.1-1.1.jarを置きます。
次にJavaソース(ソース名:pgJdbcApplet.java)を完成させます。
【ポイント】
ドライバクラス:org.postgresql.Driver
ドライバのローディングはClass.forName("ドライバクラス名")を使用します。
接続文字列:jdbc:postgresql://マシン名/mydb
(ここでのマシン名はPostgreSQLが動作しているマシンの名前です)
実際の接続はDriverManager.getConnection(接続文字列,ユーザ名,パスワード)で行います(ユーザ名,パスワードの引数は必須です)。
- Javaソースのコンパイル
「cd public_html」を実行します
「javac pgJdbcApplet.java」でJavaソースをコンパイルします。
pgJdbcApplet.classが作成されます。
- HTMLファイルの準備
public_html内にHTMLファイル(ファイル名の例:pgJdbcApplet.html)を準備します。
HTMLファイルのappletタグにはwidth, height以外に次の指定をしておきます。
codebase="." archive="jdbc7.1-1.1.jar" code="pgJdbcApplet"
- WindowsのIEでのJDBC Appletの動作確認
IEでhttp://マシン名/~postgres/pgJdbcApplet.htmlを開いてアプレットを実行させます。
12.Mac OS Xからのアクセス
Mac OS XからのPostgreSQLアクセスについてはこちらで少し紹介しています(REALbasicやFileMaker Proからのアクセス等)。