postgresql-7.4.2-1
作成 : 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-8 | UTF-8 | OK |
| ja_JP.eucJP | EUC_JP | OK |
| ja_JP.UTF-8 | EUC_JP | NG |
| ja_JP.eucJP | UTF-8 | NG |
| en_US.UTF-8 | UTF-8 | NG |
| なし | UTF-8 | OK |
| なし | EUC_JP | OK |
参考 ソースからコンパイルするとき、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