Linux 覚書 PostgreSQL7編




PostgreSQL7

 

セットアップメモ

1.PostgreSQLサイト<http://www.postgresql.org/>からパッケージを入手。 v7.4.3を使用する。

2.postgresユーザーの作成
# /usr/sbin/useradd postgres
# passwd postgres
Changing password for user postgres.
New password: <お好みのパスワード>
Retype new password: <お好みのパスワード確認用>
passwd: all authentication tokens updated successfully.

3.ディレクトリの作成
# mkdir /usr/local/pgsql
# mkdir /usr/local/pgsql/data
# chown -R postgres /usr/local/pgsql

4.インストール実行
$ tar zxfv postgresql-7.4.3.tar.gz
$ cd postgresql-7.4.3
$ ./configure --enable-multibyte=EUC_JP --enable-syslog
$ make
$ su
# make install

5.データベース初期化
$ initdb -E EUC_JP --no-locale -D /usr/local/pgsql/data
$ pg_ctl start

6.データベース作成
$ createdb testdb
$ psql -l
       List of databases
     Name | Owner | Encoding
------------+----------+----------
template0 | postgres | EUC_JP
template1 | postgres | EUC_JP
testdb    | postgres | EUC_JP


データベース起動・停止、設定読み直し

※データベースの操作はpostgresユーザーのみ許可される。
※環境変数 PGDATA/PosgreSQLインストールパス/data がセットされている必要がある。
※環境変数 PATH/PostgreSQLインストールパス/bin がセットされていることを前提としています。
$ export PGDATA=/usr/local/pgsql/data
$ echo $PGDATA
/usr/local/pgsql/data

1.データベース起動
$ pg_ctl start

2.データベース停止
$ pg_ctl stop

クライアント・プログラムからの切断を待たずに停止するには mオプションを使用
$ pg_ctl stop -m fast

3.データベース再起動
$ pg_ctl restart

クライアント・プログラムからの切断を待たずに再起動するには mオプションを使用
$ pg_ctl restart -m fast

4.設定読み直し
pg_hba.conf, postgresql.confを書き換えて反映させる場合に使用。
$ pg_ctl reload


クライアントからログイン可能にする為に

1.pg_hba.confを編集し、アクセスを許可するネットワークを設定
$ vi /usr/local/pgsql/data/pg_hba.conf
-[pg_hba.conf]-------------------------------------------------------------------
......(ファイル内容省略)
# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD

local   all         all                                             trust
# IPv4-style local connections:
host    all         all         127.0.0.1         255.255.255.255   trust
host    all         all         192.168.0.0       255.255.255.0     password
# IPv6-style local connections:
host    all         all         ::1               ffff:ffff:ffff:ffff:ffff:ffff:
ffff:ffff        trust

2.postgresql.confを編集し、ポート5432, tcpip_soketを許可する
$ vi /usr/local/pgsql/data/postgresql.conf
-[postgresql.conf]-------------------------------------------------------------------
......(ファイル内容省略)
#---------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#---------------------------------------------------------------------------

# - Connection Settings -

#tcpip_socket = false
tcpip_socket = true   <-- 先頭の # を外し、パラメータに true をセットする

......(ファイル内容省略)

#port = 5432
port = 5432   <-- 先頭の # を外す。

3.データベースユーザーのパスワードをセット
$ psql testdb
Welcome to psql 7.4.3, 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=# alter user postgres password '<新しいパスワード>';
ALTER USER
testdb=# \q  <-- psqlからログアウト

4.設定ファイル変更の内容を反映
$ pg_ctl reload
postmaster successfully signaled


バックアップ・リストア

1.ホットバックアップ
データベースを停止させずに、データのダンプを出力させる。
$ pg_dump -d <データベース名> > ./<出力するダンプファイル名>
例)testdbデータベースをtestdb_backup.dmpファイルにバックアップする場合
$ pg_dump -d testdb > ./testdb_backup.dmp

※テーブル単位でダンプを出力させる場合は、t オプションを使用する。
$ pg_dump -d <データベース名> -t <テーブル名> > ./<出力するダンプファイル名>

例)testdbデータベースのtesttableテーブルをtestdb.testtable.dmpファイルにバックアップする場合
$ pg_dump -d testdb -t testtable > ./testdb.testtable_backup.dmp

2.ホットリストア
データベースを停止させずに、データをリストアする。
※リストア対象のデータベース・テーブルに既にデータが存在している場合、制約違反ならないデータは重複して登録されてしまう為、注意。
$ psql -e <データベース名> < ./<リストアするダンプファイル名>  (eオプションは詳細情報出力)
例)testdb_backup.dmpファイルからtestdbデータベースへリストアする場合
$ psql -e testdb < ./testdb_backup.dmp

※テーブル単位でリストアする場合は、t オプションを使用する。
$ psql -e <データベース名> -t <テーブル名> < ./<リストアするダンプファイル名>
例)testdb.testtable_backup.dmpファイルからtestdbデータベースのtesttableテーブルへリストアする場合
$ psql -e testdb -t testtable < ./testdb.testtable.dmp


syslogdを経由してログ出力させる

PostgreSQLだけではないが、ログの出力は欠かせない存在。PostgreSQLにはログ出力方法が以下の3通りある。
  1. 標準出力に出力する
  2. 指定ファイルに出力する
  3. syslogd -> messagesに出力する
1、2の場合は、そのままではログ出力時刻も分からず、ファイルのローテーションも使用できない。その為、過去を振り返る場合にいつの時点でのログなのか、管理が難しくなる。そこで、その他のミドルウェアと同様にログ管理を手っ取り早くする為に、syslogdを経由してmessagesへ出力する方法がある。

syslogdを使用するためには、インストール時点からの準備が必要となる。
1.configureオプションで enable-syslogを指定していること
$ ./configure --enable-syslog

2.postgresql.conf のsyslogパラメータに1または2がセットされてあること(デフォルトは 0 )。
$ vi /usr/local/pgsql/data/postgresql.conf
-[postgresql.conf]-------------------------------------------------------------------
......(ファイル内容省略)
# - Syslog -

#syslog = 0 # range 0-2; 0=stdout; 1=both; 2=syslog
syslog = 2 # range 0-2; 0=stdout; 1=both; 2=syslog

......(ファイル内容省略)

3.設定変更を行なった場合は、pg_ctl reloadにより反映させることができる。
$ pg_ctl reload