承前
にて、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
バックアップを取ったデータベースのリストア
$ psql -U postgres -d template1 < ./pgdball.dmp