postgresql-7.3.4
作成 : 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