Linux で自宅サーバ [ Home Server Techncial ]

>>トップページに戻る

 PostgreSQL の導入

PostgreSQL とは、本格的な RDBMS (つまりはデータベース)の事です。オープンソースで無償で利用する事が可能です。
私の所感としましては、「初心者でも扱いやすい」という印象を受けました。

ちなみに、「 PostgreSQL 」は、「ポストグレス」「ポストグレエスキューエル」「ポストグレスキューエル」などと発音する(呼ばれている)らしいです。
私は「ポストグレスキューエル」がお気に入りです。

Vine Linux には元々 PostgreSQL がインストールされています。
私は、触っている内に何がなんだかワケ分からなくなり、元々の PostgreSQL を削除しました。

ですので、新規でインストールする事になりました。
「特に PostgreSQL について触ってないよ」と言う方は、事項の PHP に関する記述からお読み下さい。

この PostgreSQL の導入に関しては、Web 上でアクセスする事を前提に設定を進めて行きます。
またデータベースにアクセスする Web サーバは Apache、プログラム言語は PHP を前提としていますのでご注意下さい。

全体のイメージは以下の通りです。

利用者(ブラウザ) <-- --> PHP / Apache <-- --> PostgreSQL

ページ内コンテンツ一覧

▲ページの最上部に戻る

 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 版 )のインストール

次に、 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 の初期設定

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 を編集します。
フルパスは /var/lib/pgsql/data/pg_hba.conf になります。
編集個所は 245 行目です。

#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は正常に動作しています。

▲ページの最上部に戻る

 Web 上からアクセス可能にする

続いて、 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 へのアクセスが可能になりました。

▲ページの最上部に戻る

Copyright© Home Server Technical. All Right Reserved.
webmaster@miloweb.net