概要 †PostgresQL を使って Relational Database の基本を学ぶ. リレーショナル代数や正規化などのRDB の 一般論を教科書によって学んだ後, 実際に実用的な RDB を作成し, ruby を使った CGI で Relation 演算(検索, 追加, 修正, 削除)を行なう ことを目標とする. 講義の目標 †この講義では, データベース(DB)について学ぶ. 具体的なモデルとして住所録かそれ以外の何か, 受講者の希望するものをとりあげる. いずれかの DB モデルを使って 実際に PostgresQL サーバを使用して 各自が自分の住所録データベースもしくは 家計簿を作成し, 運用するようにする. またその際, データの作成や編集などを するための CGI も 作成し, 実用的情報(データベース)システムの構築をする. 受講する前の準備 †リテラシー確認問題 をすませておくこと.
この問題が100% すらすらとできるようでなければこの授業は難儀する.
課題関連(まとめ) †目標 †課題の目標は以下の通りである.
リンクの張り方 †
CGI のセキュリティー †CGI の中には誰にでも実行されると困るものがある. そこでアクセス制御を行なう. 最もいいのは各人の user 名と password を設定しておくことであるが, この方法では 検証に手間がかかってしまうため, IP アドレスによるアクセス制限に留める. 問題があったときは, user 認証に切り換える.
テーブル一覧 †自分が所有する(スキームに属する)テーブルの一覧を出す 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 関連 †
ruby 関連 †PostgresQL 関連 † |