PostgreSQL の導入
PostgreSQL とは、本格的な RDBMS (つまりはデータベース)の事です。オープンソースで無償で利用する事が可能です。
私の所感としましては、「初心者でも扱いやすい」という印象を受けました。
ちなみに、「 PostgreSQL 」は、「ポストグレス」「ポストグレエスキューエル」「ポストグレスキューエル」などと発音する(呼ばれている)らしいです。
私は「ポストグレスキューエル」がお気に入りです。
Vine Linux には元々 PostgreSQL がインストールされています。
私は、触っている内に何がなんだかワケ分からなくなり、元々の PostgreSQL を削除しました。
ですので、新規でインストールする事になりました。
「特に PostgreSQL について触ってないよ」と言う方は、事項の PHP に関する記述からお読み下さい。
この PostgreSQL の導入に関しては、Web 上でアクセスする事を前提に設定を進めて行きます。
またデータベースにアクセスする Web サーバは Apache、プログラム言語は PHP を前提としていますのでご注意下さい。
全体のイメージは以下の通りです。
利用者(ブラウザ) <-- --> PHP / Apache <-- --> PostgreSQL
ページ内コンテンツ一覧
PostgreSQL を web 上で使用する為に最低限必要なパッケージをインストールします。
ここでインストールする他にも PostgreSQL に関するパッケージは沢山ありますので、用途に応じてインストールして下さい。
Linux WORLD 5 月号( IDGジャパン )によると、最低限必要なパッケージは下記の 3 つでした。
早速新規に rpm コマンドを使いインストールしようとしても、
依存関係でゴチャゴチャ言われたので、 apt-get コマンドでインストールしました。
# apt-get update <-- APT 用のデータベースを更新
# apt-get install postgresql <-- 「 postgresql 」に関するパッケージを依存関係を含めインストールしてくれる
一応、何がインストールされたかを確認します。
# rpm -qa | grep postgresql <-- 「 postgresql 」という文字を含むパッケージを全て表示
postgresql-libs-7.2.3-0vl1
postgresql-7.2.3-0vl1
postgresql-server のパッケージがインストールされなかったので、インターネット上で探し出し、個別でインストールします。
# rpm -ivh postgresql-server-7.2.3-0vl1.i386.rpm
念の為もう一度確認しておきます。
# rpm -qa | grep postgresql
postgresql-libs-7.2.3-0vl1
postgresql-server-7.2.3-0vl1
postgresql-7.2.3-0vl1
これで、PostgreSQL の必要最低限の動作環境は揃った事になります。
この必要最低限の動作環境は、PostgreSQL に PHP でアクセスする事を前提にした場合の条件です。
次に、 PHP をインストールします。
以前、ソースからコンパイルしてインストールしていましたが、これもワケが分からなくなり、削除し、新規で RPM でインストールしました。
$ su
# rpm -ivh php-4.2.3-0vl1.i386.rpm
この PHP を RPM でインストールするには、依存関係がどうのこうのと言われると思います。
そんな時は、依存するパッケージをインターネット上で探し出し、インストールします。
私が PHP をインストールする時に、前もってインストールした RPM は以下の通りです。
これらをインストールしたら PHP に関するパッケージがやっとインストール出来ました。
# rpm -ivh php-4.2.3-0vl1.i386.rpm <-- PHP そのもの
# rpm -ivh php-pgsql-4.2.3-0vl1.i386.rpm <-- PHP から PostgreSQL を操作する為のパッケージ
Apache 側の設定は、当サイトの「 PHP の導入 > PHP の設定 」の「次に Apache の設定です。」のくだりからご覧下さい。
PostgreSQL を起動してみます。
この起動により、データベースの初期化、必要なファイルの生成や各種設定を自動的に行ってくれる様です。
# /etc/rc.d/init.d/postgresql start データベースを初期化中: [ OK ] Postmasterは既に実行中です ↑と表示された
PostgreSQL の最高権限を持つ「 postgres 」ユーザにパスワードを設定します。
$ su <-- root になります
# passwd postgres
Changing password for user postgres
New UNIX password:***************** <-- 実際には何も表示されません
Retype new UNIX password:***************** <-- 実際には何も表示されません
passwd: all authentication tokens updated successfully
ネットワーク経由でデータベースにアクセスするので、
TCP/IP 通信の許可を設定します。
/var/lib/pgsql/data/postgresql.conf を編集します。
編集個所は 26 行目です。
#tcpip_socket = false
を
tcpip_socket = true
に変更します。
編集出来たら保存します。
続いて同じ階層にある pg_hba.conf を編集します。#host all 127.0.0.1 255.255.255.255 trust を host all 127.0.0.1 255.255.255.255 trust に変更します。(コメントを取るだけです)
編集出来たら保存します。
上記 2 つのファイルが編集できたら、PostgreSQL を再起動します。
# /etc/rc.d/init.d/postgresql restart
そして、Linuxの一般ユーザ( 例として hoge さん )に PostgreSQL の実行権限を与えます。
# su postgres
$ createuser hoge
Shall the new user be allowed to create databases? (y/n) y <-- 新しいデータベースの作成権限を与える
Shall the new user be allowed to create more new user? (y/n) n <-- ユーザの追加権限は与えない
CREATE USER <-- 正常にユーザーを作成した証。この表示が無いとユーザの作成は失敗しています。
データベースを作成します。
# su - hoge
$ createdb sampledb
CREATE DATABASE <-- 正常にデータベースを作成した証
次にテーブルを作成します。
テーブルの作成方法は、psql コマンドを用いても作成できますが、
面倒だったのであらかじめテーブルを作成する SQL を記述したファイルを読み込ませ、テーブルを作成する方法を取る事にしました。
新規で SampleTable.sql というファイルを作成する。
中身は以下の通り。
drop table SampleTable;
CREATE TABLE SampleTable (
No integer,
Name varchar(20)
);
テーブルを作成する。
$ psql -f SampleTable.sql sampledb
CREATE <-- 正常にテーブルを作成した証
これで、エラーが出なかったら、成功です。
確認してみましょう。
$ psql -n sampledb PostgreSQL の会話型ターミナル、psql へようこそ \copyright とタイプすると、配布条件を表示します \h とタイプすると、SQL コマンドのヘルプを表示します \? とタイプすると、内部スラッシュコマンドのヘルプを表示します \g と打つかセミコロンで閉じると、クエリーを実行します \q で終了します SampleDB=> \d SampleTable <-- 作成したテーブルの確認 テーブル "sampletable" カラム | 型 | 修飾語 ----------+-----------------------+-------- no | integer | name | character varying(20) | 現時点でレコードは 1 件もありませんので、レコードをテスト用に数件追加します SampleDB=> INSERT INTO sampleTable(no,name) VALUES(1,'GODZILLA'); INSERT 16582 1 <-- 正常に追加した証 SampleDB=> INSERT INTO sampleTable(no,name) VALUES(2,'MOTHRA'); INSERT 16582 1 <-- 正常に追加した証 SampleDB=> INSERT INTO sampleTable(no,name) VALUES(3,'KING-GHIDORAH'); INSERT 16582 1 <-- 正常に追加した証 テーブルの中身を確認します。 SampleDB=> SELECT * FROM SampleTable; no | name ----+--------------- 1 | GODZILLA 2 | MOTHRA 3 | KING-GHIDORAH (3 行) SampleDB=> \q <-- psql コマンドの終了
ここまで来たら、PostgreSQLは正常に動作しています。
続いて、 Apache からアクセス可能にします。
現時点で、先ほど作成したテーブル( SampleTable )にアクセスできるのは、作成者である hoge のみなので、Apache からもアクセス可能にしてやらなければいけません。
Apache 用のユーザである apache を PostgreSQL を使える様にします。
Apache 用のユーザ名の確認は、/etc/httpd/httpd.conf 中の約 380 行目の 「 User 」の記述を見て下さい。
# su - postgres
$ createuser apache
Shall the new user be allowed to create databases? (y/n) n <-- 新しいデータベースの作成権限を与えない
Shall the new user be allowed to create more new user? (y/n) n <-- ユーザの追加権限は与えない
CREATE USER
# su - hoge <-- hoge ユーザ(テーブル作成者)になる
$ psql -n SampleDB <-- 作成したデータベースにアクセスする
SampleDB=> grant all on SampleTable to apache; <-- ユーザ名 apache に、SampleTable へのアクセスを全面的に許可しています
これで、 Apache から SampleTable へのアクセスが可能になりました。