postgresql-7.3.4

[サーバの実験室 Slackware]

作成 : 2003/11/03
修正 : 2004/07/21

"サーバの実験室"の検索


PostgreSQL とは

オブジェクトリレーショナルデータベース。 本家は http://www.postgres.org/。 日本 PostgreSQL ユーザ会は http://www.postgresql.jp/

PostgreSQL に必要なパッケージ

JAVA と JDBC のサポートを可能にするため必要。

postgresql-7.3.4 の入手

ftp://ftp.ring.gr.jp/pub/misc/db/postgresql/source/ から、postgresql-7.3.4.tar.gz をダウンロードする。

postgres ユーザの作成

データベースを管理する Unix ユーザアカウント postgres を作成する。

# useradd postgres

注意! 以下のインストールと設定は、postgres ユーザで実行する。

postgresql-7.3.4 のインストール

パッケージを展開。

$ tar -zxvf postgresql-7.3.4.tar.gz
$ cd postgresql-7.3.4

日本語 EUC のサポート(--enable-multibyte=EUC_JP)と、JAVA と JDBC のサポート(--with-java)を指定して configure。 J2SDK や Ant がインストールされていないと、エラーになる。

$ ./configure --enable-multibyte=EUC_JP --with-java

続いて、make。

$ make

PostgreSQL を実行したとき問題が起きないか、チェックする。 root ユーザで実行すると initdb のテストでエラーになるので、一般ユーザで実行すること。

$ make check

チェックが問題なければ、インストールする。 デフォルトでは、/usr/local/pgsql ディレクトリ以下にインストールされる。 root ユーザとして実行すること。

$ su -c "make install"

/usr/local/pgsql ディレクトリ以下の所有者を postgres ユーザにする。

$ su -c "chown -R postgres:users /usr/local/pgsql"

環境変数の設定

PATH に PostgreSQL ユーティリティをインストールしたディレクトリをセットしておく。 /etc/profile ファイルに記述しておけば、次回ログオン時から有効になる。

PATH="....:/usr/local/pgsql/bin"

PostgreSQL の初期化

データベース格納領域(データベースクラスタ)を初期化する。 次の例では、ディレクトリとして /usr/local/pgsql/data を指定している。

$ initdb -D /usr/local/pgsql/data

-W をつけて実行すると、postgres ユーザがデータベースに接続するときのパスワードを設定することができる。 (ALTER USER コマンドで後からパスワード設定・変更することができる)

注意! ここで設定するパスワードは PostgreSQL が管理するパスワードで、OS が管理するパスワードとは別物。

$ initdb -D /usr/local/pgsql/data -W

initdb を実行すると、template0 と template1 という 2 つのデータベースが作成される。 template0 は空のデータベース、template1 は以後作成するデータベースのテンプレートになる。

コマンドラインインタフェース psql でデータベースの一覧を表示することができる。

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

pg_hba.conf によるホストベースのアクセス制御

データベース領域に指定したディレクトリ(/usr/local/pgsql/data とか)の pg_hba.conf を使用すると、ホストベースのアクセス制御をすることができる。 このファイルは、initdb を実行すると自動的に作成される。

インストール時の pg_hba.conf は以下のようになっている。 ローカルホストからと、127.0.0.1 のホストからは、すべてのユーザはすべてのデータベースにパスワードなしで接続できる。

注意! ホストにログインしたユーザは、pg_dumpユーティリティでデータベースをバックアップできてしまう。 ローカルホストからのアクセスでも、パスワードを入力入力させるようにしたほうがいいかも。

# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD
local   all         all                                             trust
host    all         all         127.0.0.1         255.255.255.255   trust

192.168.X.X からの接続にはパスワード認証を使用したい場合は、次のように記述する。

# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD
host    all         all         192.168.0.0       255.255.0.0       md5

10.X.X.X からの接続を明示的に拒否したい場合は、次のように記述する。

# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD
host    all         all         10.0.0.0          255.0.0.0         reject

注意! デフォルトでは、postgresql.conf によってネットワークからの接続をすべて拒否するように設定されている。 postgresql.conf は initdb を実行したとき、データベース領域に指定したディレクトリ(/usr/local/pgsql/data とか)に作成される。 ネットワーク経由の接続を許可するには、postgresql.conf の tcpip_socket を書き換える。

# ネットワーク経由の接続を許可
tcpip_socket = true

PostgreSQL の起動と停止

PostgreSQL を自動的に起動するためのスクリプトを /etc/rc.d ディレクトリにコピーする。

$ su -c "cp /usr/local/src/postgresql-7.3.4/contrib/start-scripts/linux /etc/rc.d/rc.pgsql"
$ su -c "chmod 755 /etc/rc.d/rc.pgsql"

Slackware の場合は、/etc/rc.d/rc.local あたりにスクリプトを実行するための記述を追加しておく。

if [ -x /etc/rc.d/rc.pgsql ]; then
  echo "Starting PostgreSQL daemon:"
  /etc/rc.d/rc.pgsql start
fi

このように設定しておくことで、システムを起動したときに PostgreSQL を自動起動できるようになる。 また、/etc/rc.d/rc.pgsql を実行すると、PostgreSQL の起動・停止ができる。

$ /etc/rc.d/rc.pgsql (start | stop | restart)

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

createdb でテスト用データベース testdb を作成する。 "CREATE DATABASE" というメッセージが表示されれば、作成は成功。

$ createdb testdb

CREATE DATABASE

psql による PostgreSQL への接続テスト

PostgreSQL サーバに接続するには、コマンドラインインタフェース psql を使用する。

psql    <--- カレントユーザと同じ名前のローカルデータベースに接続

psql データベース    <--- 指定したローカルデータベースに接続

psql -d データベース -h ホスト -U ユーザ    <--- 指定したユーザで指定したホストの指定したデータベースに接続

先ほど作成したデータベース testdb に接続してみる。 pg_hba.conf でパスワード認証が必要としている場合は、パスワード入力を求められる。

$ psql testdb

Welcome to psql 7.3.4, 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

testdb=# \q

JDBC による PostgreSQL への接続テスト

ソースを展開したディレクトリの src/interfaces/jdbc/example/ ディレクトリに JAVA のサンプルプログラムがある。 basic.java を使用して、JDBC による PostgreSQL への接続テストをしてみる。

適当なディレクトリ(ユーザのホームディレクトリなど)に example ディレクトリを作成し、そこに basic.java をコピーする。

$ mkdir ~/example
$ cp src/interfaces/jdbc/example/basic.java ~/example

-classpath に PostgreSQL の JDBC ドライバ postgresql.jar を指定して、コンパイルする。 警告メッセージが表示されるが、気にしない。

$ javac -classpath /usr/local/pgsql/share/java/postgresql.jar example/basic.java

Note: example/basic.java uses or overrides a deprecated API.
Note: Recompile with -deprecation for details.

コンパイルした example/basic.class を実行する。 -classpath に カレントディレクトリと PostgreSQL の JDBC ドライバ postgresql.jar を指定して、コンパイルする。

$ java -classpath .:/usr/local/pgsql/share/java/postgresql.jar example/basic

PostgreSQL basic test v6.3 rev 1


This example tests the basic components of the JDBC driver, demonstrating
how to build simple queries in java.

Useage:
 java example.basic jdbc:postgresql:database user password [debug]

The debug field can be anything. It's presence will enable DriverManager's
debug trace. Unless you want to see screens of items, don't put anything in here.

データベース、ユーザ、パスワードを指定して、データベース testdb に接続してみる。 ローカルホストのデータベースに接続するには、データベースとして jdbc:postgresql:testdb のように指定する。 リモートホストのデータベースに接続するには、データベースとして jdbc:postgresql//testdb のように指定する。

$ java -classpath .:/usr/local/pgsql/share/java/postgresql.jar example/basic postgres password

PostgreSQL basic test v6.3 rev 1

Connecting to Database URL = jdbc:postgresql:testdb
Connected...Now creating a statement

Running tests:
Inserted row with oid 17031
Updated 4 rows
deleted 2 rows
performing a query
  a=3 b=8
  a=4 b=8
  a=4 b=2
  a=4 b=3
  a=4 b=4
performing another query
  a=3 b=8
  a=4 b=8
  a=4 b=2
  a=4 b=3
  a=4 b=4
performing a query limited to 3
  a=3 b=8
  a=4 b=8
  a=4 b=2
Now closing the connection

[サーバの実験室 Slackware]