しいしせねっとわーく
[Linux] [PostgreSQL]

PostgreSQL 8.0/8.1/8.2をインストールする

PostgreSQLの8.1がリリースされました。今回は8.x系初の挑戦ということもあり、まぁ・・・いろいろと手さぐりしてみました。

ここでは標準ディレクトリ /usr/local/pgsql へ Java対応でインストールしてみます。 他で紹介されているインストール方法よりセキュリティに厳しく、という曖昧な目標で。

対象

VIne Linux 3.2、その他Linux/Unix系OSに最新のPostgreSQLをなんとなく最初からインストールしてみたい人

PostgreSQL 8.2 は Vine Linux 2.xにはインストールできなさそうです。

必要なもの

インストール手順

インストール作業は root で行います。なぜでしょう。postgres のユーザで postgres の実行ファイル類を更新されてしまわないようにするためです。

postgresql.setup (8.2用)をつかう場合は、

VineLinux 4.0ではdevel系のパッケージ4つをインストールしておきます。

# apt-get install readline-devel zlib-devel openssl-devel pam-devel

あとは

# ./postgresql.setup install

とするだけです。たぶん。各develパッケージはインストールされている必要があります。
http://siisise.net/pgsql/ の続きへ。

ふつうに1つずつ実行するには、

# tar zxvf postgresql-8.1.5.tar.gz
# cd postgresql-8.1.5
# ./configure --enable-nls=ja --with-openssl

必要に応じて、--with-opeenssl=/usr --with-perl なども追加できます。
PostgreSQL国際化対応パッチは、8.x系では不要なのかな・・・?

JDBCライブラリは8.xから別に配布されています。

オプションの意味

--enable-multibyte=EUC_JP または Unicode
デフォルトのDBの文字コードをEUC-JPにしています。
文字コードを指定しない場合は、7.3から--enable-multibyte自体が不要になったようです。
Unicodeを指定することもできますが、psqlコマンドなどを使う場合に文字化けするので、コンソールがutf-8で使える場合(WindowsからPuTTYなどで接続できる環境)に限って設定した方がいいです。
--with-perl
perl 用のライブラリをmakeします。
--with-openssl
SSLをつかえるようにします =で場所を指定することもできるのかな。
その他
いろいろあります

# make
# make install

/usr/local/pgsql 配下にインストールされます。

JDBCドライバの準備

http://jdbc.postgresql.org/ からダウンロードしましょう。

データエリアの準備

PostgreSQL本体は root でインストールできました。ここからはPostgreSQL管理専用のユーザを作ってデータの設定をします。これ以前のものもPostgreSQL用のユーザで作業してもかまいませんが、make install 時のアクセス権限に注意する必要があります。

PostgreSQL管理用UNIXユーザの作成

# adduser postgres

データ用ディレクトリの準備

# mkdir /usr/local/pgsql/data

好きな場所につくることができますが、通常はここでいいようです。/home/postgres/data などに作ってもかまいません。UNIX標準のディレクトリ構成にあわせるのなら/usr は書き込みしないものを置くところなので /var/local/pgsql/data などに変える方がよいです。

# chown postgres:postgres /usr/local/pgsql/data
# chmod 700 /usr/local/pgsql/data
# su - postgres

データ用のディレクトリが準備できたら、これ以降は root での作業はありません。

$ /usr/local/pgsql/bin/initdb -E EUC-JP --no-locale -D /usr/local/pgsql/data

データベースを初期設定します。locale は日本語処理の邪魔になるようなので、ここで外します。ただし、大文字小文字を区別するようになってしまいます。
文字コードはconfigure で指定したもの以外の場合に必要かもしれません。
必要なら data/pg_hba.conf 等を編集します。

環境変数は?

$PG_DATA などの環境変数は、postgres ユーザだけ(initdbとサーバ開始のときだけ)に設定すればいいので今回は設定せずにコマンド上で指定しました。複数サーバを実行する場合などで必要でしようか。

参考
http://osb.sra.co.jp/

起動用ファイルの作成(工事中)

ふたたび root 権限での作業になります。
/etc/rc.d/init.d/ に起動/終了用のスクリプトを書いてみたい。
PostgreSQL 7.2のrpm についてくるファイルを参考に書き換えてみましょうか。

#! /bin/sh

等々 書きます。postgresql.setup (8.1.5の場合)がインストーラ兼起動用ファイルとして作ってありますのでこれを使ってもいいです。

書き換えたら、

# chkconfig --add pgsql

で登録します。

起動と停止(修正予定)

起動用ファイルを使わない場合でもpostgres ユーザで、次のようにすると起動できます。

$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -o "-i" -l logfile start

または

$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data -i >logfile 2>&1 &

1つのpostmaster は1つのディレクトリのデータを管理できます。内部で複数のデータベースを持つことができます。
-i オプションを付けると、TCPポート5432を開きます。pg_hba.conf のほかに、iptables などでも外部からアクセスできないようにしておきます。
-D で指定するdata ディレクトリの中の postmaster.opts.default というファイルに、postmaster 用のオプションを記述することができます。実行中のpostmaster のオプションは、postmaster.opts というファイルに記録されていますので、間違わないようにしましょう。

$PG_DATA/postmaster.opts.defaultの中身はつぎのような感じに。8.2では不要かな?

-i

停止

$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop

または、postmaster の プロセスを kill -INT します。
通常のkill で止めない方がよいらしいです。

クライアント側の設定

$PATHの設定を /etc/profile などに追加します。

#!/bin/sh
PATH=/usr/local/pgsql/bin:$PATH
export PATH

と書いたファイルを /etc/profile.d/postgresql.sh という名で作って、実行属性をつけておきます。 PG_DATAなどは設定しません。cshを使っている場合は、postgresql.csh というファイルを作らなければなりませぬ。

# chmod +x postgresql.sh

ユーザ用データベースの作成

http://siisise.net/pgsql/ の続きへ。