PostgreSQL を利用できるようにする


Apache, PHP が載っている FreeBSD マシンに PostgreSQL をインストールして、PHP プログラムからデータの読み書きができるようにします。

PostgreSQL のインストール

root でログイン

# /stand/sysinstall

Configure

Packages

2 FTP

Japan

databases

postgresql-7.4.6 を選択

[ OK ]

Install

[ OK ]

再起動

root でログイン

PostgreSQL の管理者 gpsql にスイッチ

# su - pgsql
$

データベースの初期化

$ initdb --encoding=EUC_JP --no-locale 

データベースの起動

$ postmaster -D /usr/local/pgsql/data >logfile 2>&1 &

テストデータベースの作成

$ createdb test
CREATE DATABASE 
[1] Done postmaster -D /usr/local/pgsql/data >logfile 2>&1

psql で確認

$ psql test
Welcome to psql 7.4.6, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

test=# \l
      List of databases
   Name    | Owner | Encoding
-----------+-------+----------
 template0 | pgsql | EUC_JP
 template1 | pgsql | EUC_JP
 test      | pgsql | EUC_JP
(3 rows)

test=# \q
$
          

root に戻る

$ exit
#

起動スクリプトの編集
# jvim /usr/local/etc/rc.d/010.pgsql.sh

case $1 in
start)
    [ -x ${PGBIN}/pg_ctl ] && {
        echo -n ' pgsql'
        su -l pgsql -c \
            "[ -d \${PGDATA} ] && exec ${PREFIX}/bin/pg_ctl start -s -w -o '-i'"
                                                                        ^^^^^^^
                                                                        追記↑
    }
    ;;
          
#

ユーザデータベースの作成

# su - pgsql
$ createuser shima 
Shall the new user be allowed to create databases? (y/n) y 
Shall the new user be allowed to create more new users? (y/n) n 
CREATE USER 


shima でログインして.profile を編集

----------加筆 ここから
PGLIB=/usr/local/lib

# note: PGDATA can be overridden by the -D startup option
PGDATA=/usr/local/pgsql/data

export PATH PGLIB PGDATA
----------加筆 ここまで

再ログインしてデータベースを作る
> createdb
CREATE DATABASE
> psql
Welcome to psql 7.4.6, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

shima=> \l
      List of databases
   Name    | Owner | Encoding
-----------+-------+----------
 shima     | shima | EUC_JP
 template0 | pgsql | EUC_JP
 template1 | pgsql | EUC_JP
 test      | pgsql | EUC_JP
(4 rows)

shima=>
          

PostgreSQL へ接続するためのモジュールを追加します。

php のインストール

root でログイン

# /stand/sysinstall

Configure

Packages

2 FTP

Japan

[ YES ]

php4-pgsql-4.3.10

[ OK ]

Install

[ OK ]

再起動

 

テーブルの作成

shima でログイン

テーブル生成のための SQL 文を書いたファイルを作る。

> jvim create.sql

create table meibo (
no integer not null,
shimei text,
primary key (no)
);

保存して終了

:wq!

SQL 文の実行

> psql shima < create.sql
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "meibo_pkey" for table "meibo"
CREATE TABLE
>

確認

> psql
Welcome to psql 7.4.6, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

shima=> \d
       List of relations
 Schema | Name  | Type  | Owner
--------+-------+-------+-------
 public | meibo | table | shima
(1 row)

shima=> \d meibo
     Table "public.meibo"
 Column |  Type   | Modifiers
--------+---------+-----------
 no     | integer | not null
 shimei | text    |
Indexes:
    "meibo_pkey" primary key, btree ("no")

shima=>
          
データを登録する SQL 文を書く

> jvim data.sql

insert into meibo (no, shimei) values (10, '島村');
insert into meibo (no, shimei) values (20, '鈴木');
insert into meibo (no, shimei) values (30, '佐藤');

保存して終了

:wq!

SQL 文の実行

> psql shima < data.sql
INSERT 17151 1
INSERT 17152 1
INSERT 17153 1
>

確認

> psql
Welcome to psql 7.4.6, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

shima=> select * from meibo;
 no | shimei
----+--------
 10 | 島村
 20 | 鈴木
 30 | 佐藤
(3 rows)

shima=>
          

 

php で表示

簡単な PHP プログラムを書いてデータを抽出してみます。

shima でログイン

> cd public_html
>jvim test.php
<?php
    $con = pg_connect("host=localhost port=5432 dbname=shima user=shima");
    $sql = "select * from meibo";
    $result = pg_query($con, $sql);
    for ($ii = 0; $ii < pg_num_rows($result); $ii++) {
        echo pg_fetch_result($result, $ii, 'no');
        echo "==";
        echo pg_fetch_result($result, $ii, 'shimei');
        echo "<br>";
    }
?>
保存して終了
:wq!
ブラウザを起動して確認

http://192.168.1.2/~shima/test.php

以下のように表示されればOK

10==島村
20==鈴木
30==佐藤

 

作成日:2005/8/18


島村製作所
Shimamura Works

〒 815-0033 福岡県福岡市南区大橋 1-22-3-501
TEL : 092-983-6045
E-Mail : info@shimamuraworks.com

トップ  戻る