line-01
line_glay
>
 Welcome!  page:no03/resbbs/resbbs.php
  odic01   PostgreSQL
  by:大阪演劇情報センター + 未知座小劇場     
 home:top   server library:top
top
line_glay

PostgreSQL

\n"); } else { print ("はじめまして。よろしかったらご意見などお聞かせ下さい。
\n"); } ?>
PostgreSQL(ポストグレエスキューエル)はカリフォルニア大学バークレ校のデータベースの研究から生まれたそうです。

Ingres(1997--1985)Postgres(1986--1994)Postgres95(1994--1995)PostgreSQL(1996-- )

  PostgreSQL(わたしの環境にインストールされているのはバージョン 7.1.2-6)は、 プロセス構成としてクライアント・サーバ構成をとっています。
  サーバではpostmasterというプロセスが常時稼働。クライアントプロセスの接続要求を待ち、 要求に応じて1ユーザ1プロセスのサーバプロセスが起動し、要求が処理されます。 postmasterが動いていないとPostgreSQLは使えないということです。
  使用の実際はPostgreSQLが作成した、あるデータベースの特定のテーブルと対話するには、SQL言語を使用するのですが、 もちろんここで対話を行おうとしているデータベースもテーブルもSQLコマンドを使って作成されます。
  ここでは実際にデータベースを作成してみるのがいいのですが、こちらの力量(HTMLタグの知識不足、RDBMSへの無知) に規定されすぐさま何かが報告できるというものではないので、まず理解を深めるしかありません。
  なお、わたしの思いですが、このPostgreSQLを学習しようとするのはPHP言語で対話するためということになります。 Webアプリケーションによるデータベース操作、といえば少しは具体的になるでしょうか。
  またもう一つはWindowsのGUI環境から、LAN経由で直接PostgreSQLにアクセスしてデータを使うことを目論見んでいます。 WindowsからのアクセスはPostgreSQL用のODBC(Open Database Connectivity)ドライバが必要になる、ということまでは認識していというのが現状です。
  あれやこれや色々出てきそうですが以下は、上記意図にそってするPostgreSQLあれこれです。(2002.01.17)
">mailto:webmaster    PHP PostgreSQL MySQL サンプルスクリプト
top
line_glay
      1. PostgreSQL
        1. 環境と作動確認
        2. 各種の設定
        3. データベースの作成
        4. ユーザ登録
        5. テーブルの作成
        6. アクセス制限とセキュリティ その2
        7. メジャーバージョンアップ
        8. 補記
      2. wizとphpPgAdmin

環境と作動確認

  rpmでインストールすればpostgresホームディレクトリーは /var/lib/pgsql です。tar.gz展開なら /usr/local/pgsql となります。
  これらの確認は、

$ rpm -qa php-pgsql

で行うことができます。バージョンアップなどで変更した場合には、環境設定とあうかどうか確認する必要があるでしょう。 例えば、phpとの関係で php.iniファイルで extention= の項目などは点検が必要です。
  さらに、PostgreSQLはバージョン 7.1から設定ファイルが /var/lib/pgsql/data/postgresql.conf となりました。

  作動確認は、次のコマンドで行うことができます。

$ ps aux | grep postgres
 postgres 6xx 0.0 0.3 7580 1712 ? S 17:10 0:00 /usr/xxx/postmast
 postgres 6xx 0.0 0.3 8572 1700 ? S 17:10 0:00 postgres: stats b
 postgres 6xx 0.0 0.3 7604 1724 ? S 17:10 0:00 postgres: stats c
 root 9xx 0.0 0.1 2540 732 ttyp0 R 17:13 0:00 grep postgres

  また、

# su - postgres
$ pg_ctl status

  あるいは、

# su - postgres
$ psql -l

で「List of databases」が表示されれば PostgreSQLが稼働していることになります。

  サーバ機の再起動等で PostgreSQLが自動起動するには、

# cd /etc/rc.d/rc3.d
# ln -s ../init.d/postgresql S89postgresql
# cd ../rc5.d
# ln -s ../init.d/postgresql S89postgresql

としてレベル3,5で起動させます。

  [追記] なお、注記というほどのことではありませんが、筆者の場合、期せずrebootなどを繰り返していると、 ランレベルが壊れpostgreSQLが起動しないことが、多々ありました。この場合、上記コマンドでエイリアスを作成し直せばいいのですが、 それは「K15postgresql」を削除して、新たに「S89postgresql」を作成する事になります。この手間をさけるには、以下のコマンドです。(04.03.31)

# chkconfig postgresql on


各種の設定

  アクセス制限とセキュリティ /var/lib/pgsql/data/pg_hba.conf

host  all  0.0.0.0  0.0.0.0  trust  (すべての接続がok)
host  all  192.168.0.1  255.255.255.0  turst  (192.168.0.xの接続がok)
host  all  192.168.2.1  255.255.255.255  turst  (192.168.2.1だけの接続ok)

  /var/lib/pgsql/data/postgresql.conf  (本体の設定)
  ブラウザからPostgreSQLにアクセスするのに大変悩みました。PostgreSQLやPHP、Apacheはそれぞれうまく稼働しているのですが、 なかなかPostgreSQLが話をしてくれませんでした。そこで『PostgresSQL完全攻略ガイド』(著・石井達夫)に習って以下を追記した。

silent_mode = on  (postmaster -S オプションに等しい)
tcpip_socket = on  (postmaster -i オプションに等しい)
syslog = 2  (端末とsyslogに出力)

  /etc/syslog.conf  (ログの設定)
  以下を変更し、追記した。

*.debug;mail.none;authpriv.none/var/log/messages
local0.*      /var/log/postgres

  /etc/httpd/php.ini  (PHP関係の設定)
  以下を追記した。

extension=pgsql.so

  postmasterの起動と再起動

# su - postgres
$ pg_ctl -w start
$ pg_ctl stop

  このpg_ctlはPostgreSQL 7.0から導入されたpostmasterの管理ツール。


データベースの作成


  PostgreSQLのインストール直後の段階では、PostgreSQLのスーパユーザpostgresが、Linuxユーザとして登録されているだけだ。
  言葉を換えれば、この時点でDB(データベース)を作成ができるのはpostgresだけである。しかしLinuxにはpostgresとしてログインできない。 パスワードが設定されていないからだ。
  このためrootログインしてコンソールから、

# su - postgres

  になるか、

# passwd postgre

  としてパスワードを設定してpostgresでログインする事になる。以下は $ postgresでの作業である。

$ createdb yubin

  これで /var/lib/pgsql/data/ に「yubin」DBが作成された。


ユーザ登録


  ここでいうユーザとはデータベースユーザのことです。PostgreSQLを使うにはユーザ登録の必要があります。

 $ createuser ユーザ名

  この createuserコマンドを使えるのはpostgreSQLのスーパユーザであるpostgresだけです。


テーブルの作成

  ここでSQLを使うことになる。だが、「SQLはUNIXコマンドでもプログラミング言語でもない。このためPostgreSQLにSQL要求を伝えるには、 SQLを解釈して実行するクライアントアプリケーシが必要となる。PostgreSQLには対話型のクライアントアプリケーションとして『psql』 というユーティリティが付属している」のでこれを使う。このほかGUIベースの対話型のクライアントアプリケーションとしては、Tcl/TK で開発されたPeAccess【注】があるがここでは「psql」で以降をすすめる。
  テーブルの作成にはSQLのCREATEステートメントを使う。テーブル名「yubin_tab」。postgresのホームディレクトリーに「yubin_tab.create」 ファイルを用意する。
  postgresでログインしよう。続いて$ psql yubindeでpsqlクライアントアプリケーションに移行する。

$create table yubin_tab
(
new_zip   char(7),
old_zip   char(5),
address_1 varchar(128),
address_2 varchar(128),
address_3 varchar(128)
);

  この内容のファイルを次のコマンドで実行すると「yubin」DBに「yubin_tab」が作成される。

# psql yubin < /var/lib/pgsql/yubin_tab.create

【注】PgAccess http://www.flex.ro/pgaccess/


アクセス制限とセキュリティ その2


  アクセス制限 /var/lib/pgsql/data/pg_hba.confでのpassword passwd の使用

host all 127.0.0.1 255.255.255.255 trust (自身は接続がすべてok)
host takodb ***.***.***.268 255.255.255.255 password passwd
host hanakodb ***.***.***.188 255.255.255.255 password passwd

  上???よう??/var/lib/pgsql/data/pg_hba.confの設定がなっている場合、外部からの接続をデータベース利用者にパスワードをあて、 制限をしている。takodbデータベースには***.**.**.268 はアクセスできる。hanakodbデータベースには ***.**.**.188 がアクセスできるだけである。
  この場合、/var/lib/pgsql/data/ にpasswd ファイルを置き、そのファイルでユーザ認証を行う。
  passwdファイルは postgresユーザのコマンドで作成する。

$ cd /var/lib/pgsql/data
$ pg_passwd passwd
File "passwd" does not exist. Create? (y/n): y //yでpasswdファイルができる。初回だけ
Username: tako //利用ユーザ名
New password: //パスワードを入力(エコーされない)
Re-enter new password: //パスワードを入力(エコーされない)

  テーブルのアクセス制限を設定することでさらに細かく制限をかけることができる。
  なお、パスワードの変更は、

$ alter user tako with password "iitenki"

のコマンドでパスワードが iitenki に変わる。
(02.11.02)


メジャーバージョンアップ

  2002.11.21日、Turbolinuxのサイトを覗くと、PostgreSQLのメジャーバージョンアップがありましたので、挑戦することにしました。
  現状のPostgreSQLは7.1xです。これを7.2xにアップグレードするというものです。 単にturbopkgを利用すればいいというものではありませんでした。
  どうにかうまくいきましたので、一つの参考事例にでもなれば。あくまでもRPMでの話です。

# su - postgres
$ pg_dumpall -o > ファイル名 //一括して全てのデータベースのバックアップです。postmasterは稼働中です
$ mv -r pgsql pgsql.bak //面倒だったのでディレクトリ(フォルダ)ごと避難しました
$ pg_ctl stop //PostgreSQL(postmaster)の停止
# turbopkg //一連の作業

  これで、インストールは終りです。復旧になるのですが、わたしの場合、サーバ機の再起動ができないというのが条件でした。

# su - postgres
$ initdb //初期化です。これで /var/lib/pgsql が新規にできました
$ pg_ctl -w start //PostgreSQL(postmaster)の起動
$ psql -e template1 < ファイル名 //データベースが作成再現されデータが流し込まれます

  これでユーザも含めてすべてが復旧したことになります。いろいろ試したのですが結果的に復旧、ということになります。
(02.11.21)


[ 注記 ]

  例えば、メジャーバージョンアップを /var/lib/pgdql を残したまますると困ったことになります。initdbコマンドで文句がでます。 だからといって /var/lib/pgdql を避難すると su - postgres がききません。
  この場合だと、ここでわたしは、 pgsql を pgsql.bak とし再起動しました。但し、postgresqlが自動起動するようにしての再起動です。
  サーバが立ち上がり、

# ps aux | grep postgres
postgres 827 0.0 0.2 7516 1688 ? S 16:20 0:00 /usr/bin/postmast
............略....................

  と、同等の文字列がみえれば正解です。
  新しく /var/lib/pgdql が作成されているので、ここでデータを流し込めば復旧です。(02.11.23)

補記

《 ■ 参照URL   ※サイト内参照ページ    引用、参照書籍 ■ 》
PostgreSQL
日本PostgreSQLユーザ会
PostgreSQL7.1日本語マニュアル
連載記事 「PostgreSQLで作るLinuxデータベース」
※ 稼働事例01 (2002.11.21 記)
※ 稼働事例02 (2002.11.21 記)
※ PostgreSQL とMySQLのコマンド対応表 (2002.11.21 記)

このページの作成にあたり、上記に掲げたURLや書籍を参考にしました。謝意を表します。具体的な引用については明記しました。 内容の間違いや、誤字は筆者の責任であり、関係する参照先の責任ではありません。


  top   home:top   server library:top   PHP PostgreSQL MySQL サンプルスクリプトへ