S.u.S.E. Linux 5.3(データベース編)
(1)ADABAS Dの基本動作確認
S.u.S.E. Linux 5.3にはADABAS D Personal Edition 10.01が付属しています。
またそのADABASには二つのデータベース(MYDBとVShop)が付属しています。
MYDBには画像データ(後述)を格納したFotosテーブルが格納されています。
VShopはeコマース用のWebサービス対応データベースです(vishopパッケージに含まれるVShopページにはADABAS D 10.0の表示があります)。
※以下すべてadabasというユーザで操作しますが、GUIツール利用時はDISPLAY環境変数にlocalhost:0.0がセットされている必要があります。
- xqueryによるSQLの実行
「xquery」コマンドを起動するとテキストモードの接続画面が表示されます。
USERNAME/PASSWORD共にdemoを指定し、SERVERDBにはMYDBを指定します。
SERVERNODEのデフォルトは「local」なのでそこは入力せずにEnterキーを押すと接続できます。
- テーブルの新規作成、レコード追加、レコード検索
例えばmytableというテーブルを新規作成するにはQUERY画面で以下のSQLを指定してF5キーを押します。
※正常処理されると「Database command successfully executed」と表示されます。
create table mytable (mycode char(4) not null,myname char(20),
mycomment varchar(30))
レコード追加はQUERY画面で「insert into mytable values('0050','YaST','ver 0.97.2')」という形式のSQLを実行します。
レコード検索はQUERY画面で「select * from mytable」という形式のSQLを実行します。
レコード件数が多くて次の画面を見たい場合はコマンド欄に「down」を指定してEnterキーを押します。
QUERY画面の操作コマンドはヘルプで確認できます。
- 画像データの表示
ADABASには画像データをGUI表示するFotosというサンプルアプリケーションが付属しています。
fotosコマンドを起動するとまずGUI接続画面が表示されます。
Username/Password/Serverdb欄に値を指定してConnectボタンを押します。
すると鉄道関連の画像が表示されます。
矢印マークのナビゲーションボタンで表示画像を遷移できます。
本アプリケーションはMYDBのfotosというテーブル中のFOTOカラム(LONG属性)の内容(画像)を表示しています。
(xqueryにおけるselect * from fotosの結果表示)
- ADABASパネル
ADABASにはPanelというシンプルなデータベース状態監視ツールが付属しています。
panelコマンドを起動するとfotosと同じGUI接続画面が表示されます。
Username/Password欄は共に「control」を指定しServerdb欄にはMYDBを指定してConnectボタンを押します。
接続できるとADABASパネルが表示されます(正式名は「Panel - Adabas D Remote GUI Control」です)。
PanelのInfoSheetを選択するとSQLの発行回数欄等が定期的に変化します(インターバルは設定変更可能)。
下記はpanelの[Help]−[About]で表示されるバージョン情報です。
(2)Ingresの基本動作確認
S.u.S.E. Linux 5.3にはPostgreSQLのベースになっているIngresが付属しています。
S.u.S.E. Linux 5.3付属のIngresのバージョンは8.9.4です。
※実際にはgensql(General QUEL Monitor)コマンドを含むingrtoolパッケージも付属しています。
ここではIngres 8.9.4の基本的な使用方法を紹介します。
(3)PostgreSQLの基本動作確認
S.u.S.E. Linux 5.3にはPostgreSQL 6.3.2が付属しています。
通常/etc/rc.configにおいてPostgreSQLが自動起動される設定になっていますがps auxで確認するとpostmasterは起動されていないことが分かります(initdbは自動実行されています)。
そこで以下のように操作します。
- 確認
pcu53:/root # cat /etc/rc.config|grep POST
START_POSTGRES="yes"
pcu53:/root # ps aux|grep postmaster
pcu53:/root # file /tmp/.s.PGSQL.5432
/tmp/.s.PGSQL.5432: socket
pcu53:/root # su - postgres
postgres@pcu53:/var/lib/pgsql > set|grep PG
PGDATA=/var/lib/pgsql/data
PGLIB=/usr/lib/pgsql/lib
_=PGDATA
pcu53:/root # su - postgres
postgres@pcu53:/var/lib/pgsql > set|grep PG
PGDATA=/var/lib/pgsql/data
PGLIB=/usr/lib/pgsql/lib
_=PGDATA
postgres@pcu53:/var/lib/pgsql > ls /var/lib/pgsql/data
PG_VERSION pg_database pg_group pg_log pg_shadow
base pg_geqo.sample pg_hba.conf pg_pwd pg_variable
postgres@pcu53:/var/lib/pgsql > ls /var/lib/pgsql/data/base/
template1
postgres@pcu53:/var/lib/pgsql > ls /var/lib/pgsql/data/base/template1/
PG_VERSION pg_description pg_proc_proname_index
pg_aggregate pg_description_objoid_index pg_proc_prosrc_index
pg_am pg_index pg_relcheck
pg_amop pg_inheritproc pg_relcheck_rcrelid_index
pg_amproc pg_inherits pg_rewrite
pg_attrdef pg_internal.init pg_statistic
pg_attrdef_adrelid_index pg_ipl pg_trigger
pg_attribute pg_language pg_trigger_tgrelid_index
pg_attribute_attrelid_index pg_listener pg_type
pg_attribute_relid_attnam_index pg_opclass pg_type_oid_index
pg_attribute_relid_attnum_index pg_operator pg_type_typname_index
pg_class pg_parg pg_user
pg_class_oid_index pg_proc pg_version
pg_class_relname_index pg_proc_oid_index
postgres@pcu53:/var/lib/pgsql > psql template1
Connection to database 'template1' failed.
connectDB() failed: Is the postmaster running and accepting connections at 'UNIX Socket' on port '5432'?
postgres@pcu53:/var/lib/pgsql > su
Password:
pcu53:/var/lib/pgsql # postmaster -i
"root" execution of the PostgreSQL backend is not permitted
It is highly recommended that the backend be started under it's own userid
to prevent possible system security compromise. This can be accomplished
by placing the following command in the PostgreSQL startup script.
echo "postmaster -B 256 >/var/log/pglog 2>&1 &" | su - postgres
pcu53:/var/lib/pgsql # su - postgres
postgres@pcu53:/var/lib/pgsql > postmaster -i
FATAL: StreamServerPort: bind() failed: errno=98
Is another postmaster already running on that port?
If not, remove socket node (/tmp/.s.PGSQL.)and retry.
postmaster: cannot create UNIX stream port
postgres@pcu53:/var/lib/pgsql >
- /var/lib/pgsql/data/pg_hba.confの編集
テスト用にすべてのデータベースが自由にアクセスできるように以下の行を追加します。
host all 0.0.0.0 0.0.0.0 trust
- ソケットファイルの削除
postgresユーザに切り替えて/tmp/.s.PGSQL.5432を一旦削除します。
rm /tmp/.s.PGSQL.5432
- postmasterの起動
postmaster -D /var/lib/pgsql/data -i -p 5432 & ※「&」をコマンドに付与してバックグラウンドで起動します。
これによって/tmp/.s.PGSQL.5432が再作成されます。
- データベース、テーブルの作成テスト
postgresユーザでデータベース、テーブルの作成テストを行います。
データベースの作成は「createdb mypsqldb」のように行います(データベースの削除はdestroydbです)。
- リブート後の確認
リブート後もポート5432でListenされていることが分かります(つまりpostmasterが正しく起動されておりpsqlコマンドが使用できます)。
pcu53:/root # netstat -a|grep 5432
tcp 0 0 *:5432 *:* LISTEN
unix 1 [ ACC ] STREAM LISTENING 7357 /tmp/.s.PGSQL.5432
(4)PerlによるPostgreSQLアクセスCGIの基本動作確認
PerlでPostgreSQLデータベースをアクセスするためにはDBI,DBD::Pgモジュールが必要となります。
しかしS.u.S.E. Linux 5.3にはPerl 5.004は含まれていますが上記モジュールは含まれていません。
そこでS.u.S.E. Linux 5.3の環境にあったDBI,DBD::Pgモジュールを別途入手してインストールしPerlで単純なCGI(PostgreSQLアクセスCGI)を試作してみました。
DBDのインストール
# tar zxvf DBI-1.13.tar.gz ※ DBI-1.13.tar.gzは1999年7月リリース版です。
# cd DBI-1.13
# perl Makefile.PL
# make
# make test
# make install
DBD::Pgのインストール
# tar zxvf DBD-Pg-0.91.tar.gz ※ DBD-Pg-0.91.tar.gzは1999年2月リリース版です。
# cd DBD-Pg-0.91
# export PGLIB=/usr/lib/pgsql/lib
# export PGUSER=postgres
# export POSTGRESHOME=/var/lib/pgsql
# perl Makefile.PL
# make
# make test
# make install
Perl DBIによるバッチアクセステスト
(1)ソース
(2)実行結果
Perl DBD::Pgによるバッチアクセステスト
(1)ソース
(2)実行結果
CGIテスト
ApacheのCGIはDBD::Pgによるアクセス形態としました。
またsrm.confには「ScriptAlias /cgi-bin/ /usr/local/httpd/cgi-bin/」の記述があることを前提にしています。
(1)CGIの呼び出しソース(testpostgresql.htmlとして/usr/local/httpd/htdocs/に用意)
(2)CGIの呼び出し画面
(3)CGIソース(testpostgresql.cgiとして/usr/local/httpd/cgi-bin/に用意)
(4)CGIの実行結果画面