Fedora Core 4 PostgreSQL8


前書き

PostgreSQL-7系とデータの互換性がないため、既にPostgreSQL-7系を運用していた場合はデータをバックアップする必要があります。

既存データのバックアップ

既存のデータベースをvacuumかけて領域を掃除してから全DBをバックアップかけます。

# vacuumdb -a
# pg_dumpall > ~/backup.pgsql

設定ファイルのバックアップ

既存のPostgreSQL-7系の設定をあとで参照できるようにユーザーディレクトリなどにバックアップとして保存しておくと便利です。

# cp /usr/local/pgsql/data/postgresql.conf ~/postgresql7.conf.back
# cp /usr/local/pgsql/data/pg_hda.conf ~/pg_hda7.conf.back

既存PostgreSQLディレクトリの退避

念のため、既存のディレクトリを退避させておきます。
インストール・動作確認が正常に終了した時点で削除すればいいでしょう。 退避させる前に必ず現在稼動しているPostgreSQLを終了させます。

# /etc/rc.d/init.d/postgresql stop
# mv /usr/local/pgsql /usr/local/pgsql7

ソースファイルの入手

PostgreSQLのWebサイトより最新のソースファイルを取得
執筆時点の最新版は 8.1.1 になります。

# wget ftp://ftp.jp.postgresql.org/source/v8.1.1/postgresql-8.1.1.tar.gz

ユーザの追加・環境設定

新規にPostgreSQL8をインストールする場合のみ必要な作業です。
PostgreSQL-7系からアップデートの場合は必要ありません。

# groupadd postgres
# useradd -g postgres -c "PostgreSQL User" -d /export/home/postgres -s /bin/bash postgres
# chown -R postgres:postgres /export/home/postgres/
# passwd postgres

postgresユーザの環境変数を追加します。
下記の方法はコマンドシェルにbashを利用している場合です。
自分の利用環境に合わせて修正してください。

# vi ~/.bashrc
PATH="$PATH":/usr/local/pgsql/bin
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH="$MANPATH":$POSTGRES_HOME/man
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":$PGLIB

ソースファイルの展開

# mkdir /usr/local/src/postgresql-8.1.1
# cd /usr/local/src/
# tar ~/xzf postgresql-8.1.1.tar.gz

コンフィグ・コンパイル・インストール

# mkdir /usr/local/pgsql
# su - postgres
$ cd /usr/local/src/postgresql-8.1.1
$ export LDFLAGS="-L/usr/local/ssl/lib/"
$ export CPPFLAGS="-I/usr/local/ssl/include/"
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib
$ ./configure --with-gnu-ld \
--with-openssl \
--with-pam \
--enable-multibyte=EUC_JP
$ make
$ make check
$ make install

データベースの初期化

初めて利用する際は必ず初期化してデータの器を確保します。

# su - postgres
$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

起動

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

初期設定

PostgreSQL-7 から若干記述方法に変更があったようです。

設定ファイル:/usr/local/pgsql/data/postgresql.conf

# vi /usr/local/pgsql/data/postgresql.conf
port = 5432
listen_addresses = 'localhost,192.168.0.100'

※postgresql-7系での tcpip_socket=on と同様

設定ファイル:/usr/local/pgsql/data/pg_hba.conf

# vi /usr/local/pgsql/data/pg_hba.conf
host    all         all         192.168.0.0/24         trust

行末に追記(192.168.0.0/24のネットワークからの接続を許可する。)

セキュリティー確保のためにも是非パスワードを利用する方をお勧めします。
外部からの接続にもパスワードを利用する場合は

host  all  all  192.168.1.0/24  password

詳細設定は、ドキュメントを参照。

再起動

# pg_ctl -p 5432 -D /usr/local/pgsql/data restart

DB利用ユーザの登録

実際にDBを操作するユーザーを登録します。
Web上のスクリプト(PHP・Java等)に記載するユーザーもここで登録します。

$ createuser testuser
Shall the new user be allowed to create databases? (y/n) y
Shall the new user be allowed to create more new users? (y/n) y
CREATE USER

createuser creates a new PostgreSQL user.

データの復旧

$ psql -f backup.pgsql template1

ユーザーパスワードの設定

外部接続からパスワードを利用する設定の場合は、ここでパスワードを設定します。

% /usr/bin/psql データベース名
# ALTER USER ユーザ名 WITH PASSWORD '********';
ALTER USER
# \q

自動起動設定

すでにPostgreSQL-7系を動かしていた場合は必要ありません。
新規にインストールした場合は自動起動のスクリプトを作成し設定をします。

postgresユーザーからrootに戻ります
作業はシステムの起動管理設定ですのでrootで行います
設定ファイルは/etc/rc.d/init.dの配下に作成します。

$ exit
$ cd /etc/rc.d/init.d

テキストエディタでファイルを新規作成します

$ vi postgresql

下記の内容を入力します

#! /bin/sh

# Installation prefix
prefix=/usr/local/pgsql

# Data directory
PGDATA="/usr/local/pgsql/data"

# Who to run pg_ctl as, should be "postgres".
PGUSER=postgres

# Where to keep a log file
PGLOG="$PGDATA/serverlog"

## STOP EDITING HERE

# Check for echo -n vs echo \c
if echo '\c' | grep -s c >/dev/null 2>&1 ; then
    ECHO_N="echo -n"
    ECHO_C=""
else
    ECHO_N="echo"
    ECHO_C='\c'
fi

# The path that is to be used for the script
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# What to use to start up the postmaster
DAEMON="$prefix/bin/pg_ctl"

set -e

# Only start if we can find pg_ctl.
test -f $DAEMON || exit 0

# Parse command line parameters.
case $1 in
  start)
        $ECHO_N "Starting PostgreSQL: "$ECHO_C
        su - $PGUSER -c "$DAEMON start -D '$PGDATA' -s -l $PGLOG"
        echo "ok"
        ;;
  stop)
        echo -n "Stopping PostgreSQL: "
        su - $PGUSER -c "$DAEMON stop -D '$PGDATA' -s -m fast"
        echo "ok"
        ;;
  restart)
        su - $PGUSER -c "$DAEMON restart -D '$PGDATA' -s -m fast"
        echo "ok"
        ;;
  status)
        su - $PGUSER -c "$DAEMON status -D '$PGDATA'"
        ;;
  *)
        # Print help
        echo "Usage: $0 {start|stop|restart|status}" 1>&2
        exit 1
        ;;
esac
exit 0

実行用のパーミッションを立てます

$ chmod +x postgresql 

各起動レベルにリンクをはります

$ cd ../rc0.d
$ ln -s ../init.d/postgresql K02postgresql
$ cd ../rc1.d/
$ ln -s ../init.d/postgresql K02postgresql
$ cd ../rc2.d/
$ ln -s ../init.d/postgresql K02postgresql
$ cd ../rc3.d/
$ ln -s ../init.d/postgresql S98postgresql
$ cd ../rc4.d/
$ ln -s ../init.d/postgresql S98postgresql
$ cd ../rc5.d/
$ ln -s ../init.d/postgresql S98postgresql

以上で自動起動の設定が完了です。
作業はpostgresユーザで行います

$ su - postgres

ps -aef でPostgreSQLのタスクが残っていないか確認します
正常に終了しているのを確認しましたら
再びrootになり新しく設定した自動起動の確認を行います

$ exit
$ /etc/rc.d/init.d/postgresql start

タスクの確認をします
下記のようにPostgreSQLが新しく起動されていれば作業は完了です。

$ ps -u postgres
  PID TTY          TIME CMD
  740 ?        00:00:02 postmaster
  750 ?        00:00:00 postmaster
  751 ?        00:00:00 postmaster

※PIDはプロセスIDですのでサーバー個々で違う番号が表示されます



Last-modified: 2015-04-23 (木) 15:18:02 (964d)