postgresql-7.4.2-1

[サーバの実験室 Redhat/Fedora]

作成 : 2004/07/25

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


postgresql一式

postgresql(クライアントユーティリティ)、postgresql-libs(ライブラリ、postgresqlに必要)、postgresql-server(サーバユーティリティ)を用意する。

postgresqlのインストール

yumでインストール。

# yum install postgresql    <--- postgresql、postgresql-libsがインストールされる
# yum install postgresql-server    <--- postgresql-serverがインストールされる

yumは時間がかかる場合があるので、めんどくさいときはFTP(たとえば、理研のFTPサイト)でパッケージをゲットしてrpmでインストール。

# rpm -ivh postgresql-libs-7.4.2-1.rpm    <--- postgresql-libsをインストール
# rpm -ivh postgresql-7.4.2-1.rpm    <--- postgresqlをインストール
# rpm -ivh postgresql-server-7.4.2-1.rpm    <--- postgresql-serverをインストール

日本語環境での注意点

ここで起動スクリプト/etc/init.d/postgresqlを実行すれば、データベースクラスタを初期化した後、SQLサーバが起動する。 しかし、日本語データベースを作成する場合は、いきなり起動スクリプトを実行しないほうがよい。

起動スクリプトからデータベースクラスタを初期化すると、環境変数LANG(日本語のデフォルトはja_JP.UTF-8)の情報を元に、ロケールを使用するよう設定される。 ロケールと実際のデータベースで使用するエンコードが違うと、ソートがうまくいかないらしい。

ロケールとデータベースエンコーディングを一致させればソートはうまくいくが、ロケールを使用するのは実行速度に問題があるらしい。 データベースクラスタを初期化する際、ロケールを使用しないよう指定するのが無難なようだ。

(例)ロケールとエンコードの組み合わせ
ロケールデータベースエンコード日本語ソート
ja_JP.UTF-8UTF-8OK
ja_JP.eucJPEUC_JPOK
ja_JP.UTF-8EUC_JPNG
ja_JP.eucJPUTF-8NG
en_US.UTF-8UTF-8NG
なしUTF-8OK
なしEUC_JPOK

参考 ソースからコンパイルするとき、7.3.4ではconfigureするときに、ロケールサポートを使用しないよう --disable-locale で指定できた。 また、--enable-multibyte でデータベースのデフォルトエンコーディングをしてできた。

# ./configure --disable-locale --enable-multibyte=EUC_JP

しかし、7.4.3のではconfigureするとき--disable-localeや--enable-multibyteを指定してもだめみたい。 (Fedoraだけ?) initdb でデータベースクラスタを初期化するときに指定する、ロケールの種類とデフォルトエンコーディングのほうが有効になるようだ。

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

データベースクラスタの初期化

postgresユーザになって、initdbユーティリティでデータベースクラスタを初期化する。 ロケールサポートを使用しないため、"--no-locale" または "--locale=C" を指定する。 -D でデータベースを配置するディレクトリ/var/lib/pgsql/dataを指定する。 -W を指定すると、postgresqlユーザ(PostgreSQLユーザで、OSが管理するユーザとは別)のパスワードを設定できる。

# su - postgres    <--- initdbはpostgresユーザで実行すること!
$ initdb --no-locale -D /var/lib/pgsql/data -W

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale C.

fixing permissions on existing directory /var/lib/pgsql/data... ok
creating directory /var/lib/pgsql/data/base... ok
creating directory /var/lib/pgsql/data/global... ok
creating directory /var/lib/pgsql/data/pg_xlog... ok
creating directory /var/lib/pgsql/data/pg_clog... ok
selecting default max_connections... 100
selecting default shared_buffers... 1000
creating configuration files... ok
creating template1 database in /var/lib/pgsql/data/base/1... ok
initializing pg_shadow... ok
Enter new superuser password: パスワード    <--- postgresユーザのパスワードを設定
Enter it again: パスワード
setting password... ok
enabling unlimited row size for system tables... ok
initializing pg_depend... ok
creating system views... ok
loading pg_description... ok
creating conversions... ok
setting privileges on built-in objects... ok
creating information schema... ok
vacuuming database template1... ok
copying template1 to template0... ok

Success. You can now start the database server using:

    /usr/bin/postmaster -D /var/lib/pgsql/data
or
    /usr/bin/pg_ctl -D /var/lib/pgsql/data -l logfile start

pg_hba.confの設定(アクセス制御)

pg_hba.confファイルで、ホストベースのアクセス制御をすることができる。 このファイルは、initdb を実行したとき、データベースを配置するディレクトリ(/var/lib/pgsql/data)に作成される。

デフォルトでは、TCP/IP経由でないlocalからの接続を許可している。 ただし、METHODで "ident sameuser" を指定しているので、psqlなどのクライアントユーティリティからデータベースに接続する際 -U オプション(PostgreSQLユーザを指定)は使用できない。

デフォルトのpg_hba.conf

# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD
local   all         all                                             ident sameuser

METHODで "md5" を指定した場合、MD5暗号化パスワードによるユーザ認証が成功すれば、接続は許可される。 METHODで "trust" を指定した場合、すべての接続は許可される。

pg_hba.conf(localからの接続は、ユーザ認証に成功すれば許可)

# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD
local   all         all                                             md5

後々、JDBCドライバを使ってデータベースに接続するので、TCP/IP経由の接続も許可しておく。

pg_hba.conf(127.0.0.1からTCP/IP経由での接続も、ユーザ認証に成功すれば許可)

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

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

postgresql.conf(TCP/IP経由の接続を許可)

tcpip_socket = true

PostgreSQLサーバの起動

PostgreSQLサーバを起動する。 root権限でスクリプトを実行しないと、エラーになる。

# /etc/init.d/postgresql start

エラーが表示されなければ、psqlユーティリティでtemplate1データベースに接続してみる。 template1データベースは、データベースクラスタを初期化したときに作成される、管理用のデータベース。

# psql -U postgresql -d template1    <--- postgresqlユーザとしてtemplate1データベースに接続

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

template1=#    <--- template1データベースに接続できた

システム起動時にデーモンが起動するよう、/etc/rc3.dディレクトリにシンボリックリンクを作成する。

# cd /etc/rc3.d
# ln -s ../init.d/postgresql S85postgresql

[サーバの実験室 Redhat/Fedora]