概要

PostgresQL を使って Relational Database の基本を学ぶ. リレーショナル代数や正規化などのRDB の 一般論を教科書によって学んだ後, 実際に実用的な RDB を作成し, ruby を使った CGI で Relation 演算(検索, 追加, 修正, 削除)を行なう ことを目標とする.

講義の目標

この講義では, データベース(DB)について学ぶ. 具体的なモデルとして住所録かそれ以外の何か, 受講者の希望するものをとりあげる. いずれかの DB モデルを使って 実際に PostgresQL サーバを使用して 各自が自分の住所録データベースもしくは 家計簿を作成し, 運用するようにする. またその際, データの作成や編集などを するための CGI も 作成し, 実用的情報(データベース)システムの構築をする.

受講する前の準備

リテラシー確認問題 をすませておくこと. この問題が100% すらすらとできるようでなければこの授業は難儀する.
チェックポイント:

  • 基本コマンド: man(jman), ls, cp, mv, rmdir, mkdir,...
  • 実行可能属性とchmod コマンド
  • 用語: 絶対パス/相対パス/HOME/親dir/カレントdir
  • 環境変数 PATH と current dir のコマンドの実行
  • kterm(シェル)/XEmacs での補完の利用

課題関連(まとめ)

目標

課題の目標は以下の通りである.

  1. 課題のページ(テーブル一覧, 検索・一覧, 追加フォームのページなどへのリンクが 張られているページ)へのリンクをはる
  2. テーブルを 2〜3 種類作成する
  3. データの検索と一覧をできるようにしておく. フォームは html で実行の処理を ruby スクリプトによる CGI で作成せよ. もちろん, フォームも cgi で表示する方式でもよい.
  4. アクセス制限を設定した auth-cgi 以下に データの追加のページを設けよ. これも html + cgi でも cgi でフォームを表示する方式でもよい.
  5. 同様に auth-cgi 以下に データの修正・削除をするページを作成せよ.原理的に これは CGI で検索結果の一覧を表示し, その各行に 修正・削除のためのリンクをはる方式を推奨する. このやり方の雛型は課題見本を参照せよ

リンクの張り方

  1. /public_html/infosys/ に index.html を作成する. このファイル(あるいは その内容)を情報システム課題のページと呼ぶ.

  2. 情報システム課題のページには, テーブル一覧(後述), 検索・一覧, 追加, 修正, 削除へのリンクをはる. ただし, 一覧からのみ修正, 削除するようにしているときは その旨明記する.

CGI のセキュリティー

CGI の中には誰にでも実行されると困るものがある. そこでアクセス制御を行なう. 最もいいのは各人の user 名と password を設定しておくことであるが, この方法では 検証に手間がかかってしまうため, IP アドレスによるアクセス制限に留める. 問題があったときは, user 認証に切り換える.

  1. directory ~/public_html/infosys/auth-cgi を作成.
  2. yositomi/public_html/infosys/auth-cgi/.htaccess.ip を 今作った directory .htaccess の名前でコピー

テーブル一覧

自分が所有する(スキームに属する)テーブルの一覧を出す shell スクリプトを 用意した. CGI として動作するようになっており(suEXEC を仮定し whoami を使用), これを情報システム課題のページにリンクとして載せるようにする. show_table.sh の中身

#!/usr/local/bin/zsh
echo "Content-Type: text/plain"
echo ""
user=`whoami`
[ x"$user" = x"yositomi" ] && user=public
echo "\d ${user}.*"|/usr/local/pgsql/bin/psql infosys2006

このファイルを show_table.sh として ~/public_html/infosys/ に保存し, 実行属性を与え*1ておこう. 課題のページには

<a href="./show_table.sh">テーブル一覧</a>

のようにしてリンクを張っておけばよい.

デバッグの仕方

 まずいきなり CGI で動かな〜いという人がいるが,

その前に コマンドラインで実行してみる. 文法エラーならその付近を示してくれるはずだ. コマンドラインからは動くが, どうも挙動が変だ. そういう時は apache (web server)のログを見ることをすすめる. 見方はいたって簡単.

% less /var/apache/logs/error_log.10XXXXXX00

ここの 10XXXXXX00 の部分は今しがた発生したバグなので, 最新のものを 見ればいいことになる. TAB を押して zsh に補完させよう.

zsh: do you wish to see all 107 possibilities (36 lines)?
	  

のように表示されるがもう一度 TAB を表示して 一覧を表示させ, 最後に表示されたものを入力すればよい. (適当なところまで追加で入力して TAB を押せば完全に 補完されるのは言うまでもない).

バックアップのとり方

 万一にそなえて各自バックアップをとっておこう. 

バックアップには pg_dump を使用する.

% cd ~/infosys
% pg_dump -t am02XXX.table_name1 infosys2004 > my_table_name1_backup.sql
% pg_dump -t am02XXX.table_name2 infosys2004 > my_table_name2_backup.sql

という具合だ. 適時バックアップをとっておき, 一応完成したと思ったら 別のファイル名でバックアップしておこう. また, アクセス制御が IP レベルなので, 学内で誰かが不慮の事故で あなたのデータを破壊してしまうかもしれない. こまめにバックアップをとる. 復元するには

% cd ~/infosys
% pg_restore < my_table_name1_backup.sql
% pg_restore < my_table_name2_backup.sql

のようにすればよい.

関連リンク

HTML 関連

  • HTML tag の一覧(その1)
  • HTML tag の一覧(その2)
  • HTML 3.2 DTD 日本語訳
  • HTML 4.01 Reference
  • 認証のサンプル
  • .htaccess の例

ruby 関連

PostgresQL 関連


*1 chmod +x である

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-10-05 (木) 17:39:19 (6429d)