kilin> how to> PostgreSQL

PostgreSQL

(2007.5.18, 2008.5.14)

データベースPostgreSQLをLinux(Fedora Core 6)で,Apache, PHPと連動させて使うには.インストールメモです.

(環境) Fedora Core 6, CentOS 5.1


PostgreSQLのインストール

rootで(以下,#はrootでのコマンドプロンプト)

# yum install postgresql-server

ユーザpostgresにパスワードを設定

# passwd postgres

ユーザpostgresのホームディレクトリ(/var/lib/pgsql/)でデータベース初期化.(以下,$はpostgresでのコマンドプロンプト)

$ su postgres
$ cd
$ initdb -D data

PostgreSQLサーバーの起動

# /etc/init.d/postgresql start

PostgreSQLサーバーの標準のラン・レベルをon.

# chkconfig postgresql on

PostgreSQLサーバーの停止方法

$ pg_ctl stop -D data

データベースの一覧の表示

$ psql -l
List of databases
Name | Owner | Encoding
-----------+----------+----------
postgres | postgres | UTF8
template0 | postgres | UTF8
template1 | postgres | UTF8
(3 rows)

データベースtestdbの作成

$ createdb testdb
$ psql -l
List of databases
Name | Owner | Encoding
-----------+----------+----------
postgres | postgres | UTF8
template0 | postgres | UTF8
template1 | postgres | UTF8
testdb | postgres | UTF8
(4 rows)

データベースtestdbの操作 - psql

$ psql testdb
Welcome to psql 8.1.8, the PostgreSQL interactive terminal.

テーブルtesttblの作成

testdb=# create table testtbl(hinmei TEXT, nedan INTEGER);
CREATE TABLE

テーブルの一覧

testdb-# \dt
List of relations
Schema | Name | Type | Owner
--------+---------+-------+----------
public | testtbl | table | postgres
(1 row)

データの登録

testdb=# insert into testtbl values('orange', 100);
INSERT 0 1
testdb=# insert into testtbl values('apple', 150);
INSERT 0 1

データの表示

testdb=# select * from testtbl
testdb-# ;
hinmei | nedan
--------+-------
orange | 100
apple | 150
(2 rows)

データベースの削除

$ dropdb -U postgres testdb

データベースのバックアップ

$ pg_dump testdb > dbbackup

バックアップファイルからデータベースの復元

$ dropdb testdb
$ createdb testdb
$ psql -e testdb < dbbackup

PHPとPostgreSQLの連携

phpのインストール.

# yum install php
# yum install php-mbstring
# yum install php-pear

php-pgsqlのインストール.

# yum install php-pgsql

Apacheの再起動.

# /etc/init.d/httpd restart

テスト用PHPファイル

以下のファイルをホームページサーバーにおいて,ブラウザで表示して,phpのバージョン情報がでればOK.
test.php
<?php
  phpinfo();
?>

ホームページからデータベースに値を書き込む,読み出す方法

以下の3つのファイルをホームページサーバーにおいて,testdb.htmlをブラウザで表示.
testdb.html
<html>
<HEAD>  
  <META http-equiv="Content-Type" content="text/html; charset=utf-8">
  <TITLE>サンプル</TITLE>
</HEAD>

<body>
データベースに値を書き込む,読み出す方法
</p><br>

<form method="post" action="write.php">
  <input type="text" value="" name="hinmei"> 
  <input type="text" value="" name="nedan"> 
  <input type="submit" value="書込">
</form>

<form method="post" action="read.php">
  <input type="submit" value="読出">
</form>

</body>
</html>
write.php
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <TITLE>書込み結果</TITLE>
</head>

<body>
<?php

$hinmei=$_POST["hinmei"];
$nedan=$_POST["nedan"];

echo "書込み結果結果<br>";
echo $hinmei;
echo "<br>";
echo $nedan;
echo "<br>";

$con = pg_connect("dbname=testdb user=postgres");
$command = "insert into testtbl values ('$hinmei', '$nedan');";
$result = pg_exec($con, $command);

pg_close($con);

?>

</body>
</html>
read.php
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <TITLE>一覧</TITLE>
</head>

<body>
<?php

echo "一覧<br>";

$con = pg_connect("dbname=testdb user=postgres");
$command = "select * from testtbl;";
$result = pg_exec($con, $command);
$n = pg_numrows($result);

echo "<table border=1>";
echo "<tr><td>品名</td><td>値段</td></tr>";

for($i=0;$i<$n;$i++){
 $hinmei = pg_result($result, $i, 0);
 $nedan = pg_result($result, $i, 1);
 echo "<tr><td>$hinmei</td><td>$nedan</td></tr>";
}
echo "</table>";

pg_close($con);

?>

</body>
</html>

参考URL, 文献

1. Fedora Core による自宅サーバーの構築 (http://www.shitomi.jp/index.html)

2. 石井 達夫 『PC UNIXユーザのためのPostgreSQL完全攻略ガイド』 技術評論社; 改訂第3版版 (2001/06)