データベース初心者がデータを読み書きできるようになるまで(PostgreSQL編)

最近,ちょっとした気まぐれでデータベースを使ったソフトを作ってみようと思ったのですが,「データベース...?」な状態だったのでそもそも何をすればいいかもよくわかっていなかったのでドはまりしました.
今後このようなことが無いように(!),まとめておきます.

そもそも何をすればよいか

私のデータベースに関する認識は,「データを大量高速にやりとりするために先人が考えたうまい方法」くらいの感じなので,実際のところどうなのかはよくわかっていません.
とりあえず,クライアントがサーバに命令を出してデータを入れたりだしたりする,というところが実現できれば良しということにしました.
今回はPostgreSQLというデータベースを使いましたので,その流れで書いています.
以下,手順を簡単にまとめます.

  1. データベースソフトをダウンロード,インストールする
  2. データベースの置き場所を決める
  3. データベースサーバのソフトを起動する
  4. データベースにアクセスするソフト(クライアント)のためのアカウントを作る
  5. データベースを作る
  6. クライアントから,サーバのデータベースにアクセスする
  7. データベースの中に,テーブルを作る
  8. テーブルに値を入れてみる
  9. テーブル内のデータを読んでみる

環境準備

今回はMac(OS X lion)なPCを使ってデータベースをいじりました.
homebrewというパッケージマネージャを使っていて,yumやapt-getのような感覚でパッケージをインストールできるようになっています.
設定は以下を参考にしました.
404 Error - FC2ブログ

ソフトのダウンロード,インストール

PostgreSQLのインストールです.
前置きのとおり,homebrewを使ってインストールしましたので,とても簡単でした.

brew install postgresql

データベースの置き場所を決める

PostgreSQLでは,initdbというコマンドを使って,データベースを作るための環境準備をします.
以下の資料によると,通例ではデータベースを/usr/local/pgsql/dataに作るのだそうです.

以下,コマンド.

initdb -D /usr/local/pgsql/data

データベースソフトの起動

pg_ctl というコマンドを使って,データベースを起動します.ここで,先ほどの置き場所を指定します.
-l オプションで,ログファイルの出力先を指定しています.
最後の start を stop に変えてコマンドを実行すると,ソフトを終了できます.

pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/logfile.log start

アクセス用のアカウントを作る

createuser コマンドを使って,PostgreSQL用のユーザ名,パスワードなどを設定します.
対話式に入力していきます.

createuser -P
$  ユーザ名は? : testuser
$  パスワードは? : testpasswd
$  もう一度入力 : 
$  スーパーユーザの権限を与える? (Yes/No) : No
$  データベース作成の権限を与える? (Yes/No) : Yes
$  ほかのユーザ作成の権限を与える? (Yes/No) : No

データベースを作る

createdb コマンドで,データベースを作ります.
ここでは,testdb という名前のデータベースを作ることにします.
すでにデータベースソフト起動の際に置き場所を指定しているので,ここでは指定する必要はありません.

createdb testdb

ログインする

クライアントソフトを起動して,ユーザと,アクセスするデータベースを指定します.
psql というコマンドです.

// psql -U <ユーザ名> <データベース名> -W(パスワード用のオプション)
psql -U testuser testdb -W
$  パスワードは? : testpasswd

データベースの中に,テーブルを作る

ここから先は,すべてpsqlでログインしたままでの操作です.
シェルが "(データベース名)=>" のような表示にかわっているはずです.
私はSQL文の書き方がよくわかっていませんので,以下のようなサイトで調べるのがよいと思います.
PostgreSQLで作るLinuxデータベース(2):PostgreSQLをコマンドラインで操作する - @IT
ここでは,testtable という名前のテーブルを作成します.
テーブルの作成の際,どのようなデータ構造にするかを決定します.
これは頻繁に変えられるようなものではなさそうなので,実際になにか作ろうとするときには,事前によく考えて設計しないとまずいようです.
今回は,id (整数),test_key (7文字の文字列),test_text(可変長の文字列)の構造をもつテーブルを作成してみます.
もしここで,テーブルが作成できない等のエラーが出る場合,指定したデータ名が PostgreSQL予約語とバッティングしている可能性がありますので,名前を変えて再度トライしてみるとよいと思います.
あと,最後のセミコロンを忘れずに.

create table testtable (id int, test_key char(7), test_text text);

テーブルに値を入れてみる

さきほど定義したテーブルにデータを入れていきます.
定義したデータのうち,一部だけにデータを入れることもできるようです.
(指定しなかったところは NULL になる)

insert into testtable (id, test_key, test_text) values (10, 'AABBCCD', 'length-free-string');
insert into testtable (id) values (500);

テーブル内のデータを読んでみる

これでデータが2つ登録されているはずですので,まとめて読み出してみます.

select * from testable;
//  こんなのが出てきます.
//  testdb=> select * from testtable;
//   id  | test_key |     test_text      
//  -----+----------+--------------------
//    10 | AABBCCD  | length-free-string
//   500 |          | 
//  (2 rows)

おわりに

とりあえずここまでで,データベースを全く触ったことがない状態から,簡単な読み書きができるようになりました.
実際に効率化などを考えると,コマンドの使い方やテーブルの設計(データの持ち方,分け方)などかなり奥深いように感じます.
ただ,試しに使ってみるぶんにはあまり悩まずドンドン作ってみたらいいんじゃないでしょうか.
私はこの手順をまとめる前にMySQLにも手を出して途中で投げたり,迷走していますし...