PostgreSQL9.3のインストールと初期化を行い、基本的な設定をして利用可能な状態までの流れです。
【環境】
CentOS 5.10 x86_64
1.libossp-uuidライブラリをインストール
postgresql93-contribの依存関係でlibossp-uuid.so.15ライブラリが必要になるためuuidを事前にインストールしておきます。
EPELリポジトリを追加
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
明示的に指定されない限り利用しないように無効化設定します。
全てenabled=1⇒enabled=0に変更します。
# sed -i -e "s/enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
無効化を確認
# cat /etc/yum.repos.d/epel.repo|grep enabled
enabled=0
enabled=0
enabled=0
uuidをインストール
# yum install --enablerepo=epel uuid
2.PostgreSQL9.3のインストールと初期化
PGDGリポジトリを追加
# rpm -Uvh https://yum.postgresql.org/9.3/redhat/rhel-5.10-x86_64/pgdg-centos93-9.3-1.noarch.rpm
明示的に指定されない限り利用しないように無効化設定します。
全てenabled=1⇒enabled=0に変更します。
# sed -i -e "s/enabled=1/enabled=0/" /etc/yum.repos.d/pgdg-93-centos.repo
無効化を確認
# cat /etc/yum.repos.d/pgdg-93-centos.repo|grep enabled
enabled=0
enabled=0
PostgreSQL9.3インストール
# yum install --enablerepo=pgdg93 postgresql93*
PostgreSQLの初期化
初期化時にロケール、エンコーディング設定も行います
# sudo su - postgres
$ /usr/pgsql-9.3/bin/initdb --encoding=UTF8 --no-locale
--encodingでPosgreSQL全体で使用するデフォルト文字コードを指定しておきます。
--no-localeはCロケールを使用することを意味します。--locale=Cと指定しても同じです。
これをやっておかないとソート等で不都合が生じる可能性があります。
一旦postgresユーザを抜けてサービスを起動します
$ exit
# /etc/rc.d/init.d/postgresql-9.3 start
サービス自動起動設定
# chkconfig postgresql-9.3 on
ロケール確認
再度postgresユーザになりロケールの設定を確認します。
ロケールCの場合setting欄に C と表示されます。
# sudo su - postgres
-bash-4.1$ psql
postgres=# SELECT name, setting, context FROM pg_settings WHERE name LIKE 'lc%';
name | setting | context
-------------+---------+-----------
lc_collate | C | internal
lc_ctype | C | internal
lc_messages | C | superuser
lc_monetary | C | user
lc_numeric | C | user
lc_time | C | user
文字コード確認
UTF8でデータベースが作成されている場合、pg_encoding_to_char欄 が UTF8 の表示になります。
postgres=# SELECT datname, pg_encoding_to_char(encoding) FROM pg_database;
datname | pg_encoding_to_char
-----------+---------------------
template1 | UTF8
template0 | UTF8
postgres | UTF8
postgresユーザのパスワード設定
postgres=# alter role postgres with password 'パスワードを入力';
psqlの終了
postgres=# \q
postgresユーザ終了
-bash-4.1$ exit
3.postgresql.confの設定
必要に応じてpostgresql.confの設定を変更します。
# vi /var/lib/pgsql/9.3/data/postgresql.conf
○利用可能な全てのIPインタフェースのネットワーク経由接続を許可
listen_addresses = '*' # what IP address(es) to listen on;
○データベースサーバに同時接続する最大数を変更
max_connections = 250
○共有メモリバッファ用メモリ量の変更
shared_buffers = 1024MB
○一時ディスクファイルに書き込む前に、内部並べ替えとハッシュテーブル操作が使用するメモリ容量
work_mem = 16MB
○WALデータ用の共有メモリ内のバッファ数
wal_buffers = -1
○ランダムディスクページをシークするためにディスクにかける時間
random_page_cost = 2.0
○PostgreSQL が使用するバッファ領域の大きさの推定値
※搭載メモリの1/2に設定することが通常の保守的な設定。
effective_cache_size = 2048MB
○ログファイル作成ディレクトリ
log_directory = '/var/log/pgsql'
○スロークエリ出力設定
log_min_duration_statement = 3s
○ログの出力内容を設定
log_line_prefix = '%t,%h,%u,%d,%l,'
○自動VACUUMログ設定(指定時間以上実行された活動をログに残す。-1は無効設定)
log_autovacuum_min_duration = 1min
○自動VACUUM操作に使用されるコスト限界値
autovacuum_vacuum_cost_limit = 200
ログディレクトリが無ければ作成
# mkdir /var/log/pgsql
所有者、グループを変更
# chown postgres:postgres /var/log/pgsql
4.PostgreSQL認証設定
PostgreSQLへログイン時の認証設定を必要に応じて変更します。
ここではWEBサーバのIPを192.168.1.111と仮定して設定しています。
# vi /var/lib/pgsql/9.3/data/pg_hba.conf
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
# ローカルUnixドメインソケット接続を無条件許可
local all all trust
# IPv4 local connections:
# IPv4ループバックアドレス及び192.168.1.111からのアクセスをpassword認証で許可
host all all 127.0.0.1/32 password
host all all 192.168.1.111/32 password
# IPv6 local connections:
# IPv6ループバックアドレスアクセスをpassword認証で許可
host all all ::1/128 password
PostgreSQLサービス再起動(設定内容をリロード)
# /etc/rc.d/init.d/postgresql-9.3 restart
5.ファイアウォール設定
postgreSQLポート開放
iptablesを編集して5432ポートへのアクセスを許可します。
# vi /etc/sysconfig/iptables
-A INPUT -p tcp -m tcp -s 192.168.1.111 --dport 5432 -j ACCEPT
iptables再起動
# /etc/rc.d/init.d/iptables restart
PostgreSQL接続確認
WEBサーバとDBサーバが別の場合の接続確認です。
WEBサーバより以下コマンドで接続して、DB一覧が表示される事を確認します。
# psql -h <DBサーバのIP> -p 5432 -U postgres
User name: postgres
Password: パスワード入力
postgres=# \l
(psqlコマンド接続オプション)
-h, --host=ホスト名 データベースサーバーのホストまたはソケットのディレクトリ(デフォルト: "ローカルソケット")
-p, --port=ポート番号 データベースサーバーのポート番号(デフォルト: "5432")
-U, --username=ユーザー名 データベースのユーザ名(デフォルト: "root")
-w, --no-password パスワード入力を要求しない
-W, --password パスワードプロンプトを強制表示する(本来は自動的に表示されるはずです)
その他のオプションについては# psql --helpを実行して参照してください。