風柳メモ

ソフトウェア・プログラミング関連の覚書が中心。

CentOS 6.5 導入時のメモ(続き:PostgreSQL 9.3へのアップグレード)

承前

CentOS 6.5 導入時のメモ - 風柳メモ

にて、Python に PyGreSQL の最新版(4.1.1)を入れたところ、

>>> import pgdb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/myname/lib/python2.7/site-packages/pgdb.py", line 66, in <module>
    from _pg import *
ImportError: /home/myname/lib/python2.7/site-packages/_pg.so: undefined symbol: PQescapeIdentifier

のというエラーが発生。
Version 4.0 では発生しない。

関連しそうなのは、

Version 4.1 (2013-01-01)

・Dropped support for Python below 2.5 and PostgreSQL below 8.3.

PyGreSQL ChangeLog

だろうか。
PostgreSQLは 8.4.18-1.el6_4 だったが。

PyGreSQL を旧版のままで使うのにも不安はあるし(うっかりアップデートしてしまいそうだし)、この際だから、PostgreSQL 9.3 を導入することに。

PostgreSQL 9.3 の設定

旧データベースのバックアップ
$ pg_dumpall -U postgres -c > ./pgdball.dmp
旧 PostgreSQL サーバの停止
# service postgresql stop
# chkconfig postgresql off
PostgreSQL 9.3 サーバインストール
# yum -y install postgresql93-server

Yum への PostgreSQL RPM Building Project リポジトリ導入済みであることが前提

PATH 追加

PostgreSQL 9.3 に対応した pg_dump や psql 等は、/usr/pgsql-9.3/bin 下にあるので、PATH に追加しておく。

$ vi ~/.bash_profile
export PATH

の直前あたりに、

PATH=/usr/pgsql-9.3/bin/:$PATH

を追加。

$ source ~/.bash_profile
PostgreSQL データベース初期化
# service postgresql-9.3 initdb

初期化は、「su - postgres -c "/usr/pgsql-9.3/bin/initdb"」でも可。

設定ファイル編集

PostgreSQL 9.3 の設定ファイルやデータは、/var/lib/pgsql/9.3/data 下にある。

# vi /var/lib/pgsql/9.3/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

の箇所を、

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             192.168.1.0/24          trust
# 2014.04.06: PostgreSQL 9.3.4 で(?) 以下がないとローカルから接続できなくなっていた
host    all             all             127.0.0.1/32          trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

のように変更(例は、サブネットマスク 192.168.1.0/24 下にいる場合)。
peerやidentのままにしておくと、認証関連でアプリの修正が必要になってくるため、ひとまず PostgreSQL 8.x のときと同様に trust にしてある。いずれ対策が必要。

# vi /var/lib/pgsql/9.3/data/postgresql.conf

※変更箇所のみ。

# (前略)
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
listen_addresses = '*'              # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)
# (後略)
ファイアウォール設定
# vi /etc/sysconfig/iptables
-A INPUT -j REJECT --reject-with icmp-host-prohibited

の直前に、

-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT

を追加。

# service iptables restart
PostgreSQL 9.3 サーバ起動
# service postgresql-9.3 start
# chkconfig postgresql-9.3 on
pg_trgm を追加したい場合

PostgreSQL 9.x に pg_trgm を後から追加 - 風柳メモ

を参照。

バックアップを取ったデータベースのリストア
$ psql -U postgres -d template1 < ./pgdball.dmp