PostgreSQL 与 Slony-I 的安装配置

Thursday, April 22nd, 2010 @ 11:31 am

常见问题
~~~~~~~
+ 备份恢复
如果要恢复一个字符集为EUC_CN的数据库,需要在initdb之前设置LANG和LC_ALL,而不是使用系统默认的字符集。

$ export LANG=
$ export LC_ALL=C
$ initdb
$ createdb -E EUC_CN contactdb_bak -T template0
$ createlang -d contactdb_bak plpgsql

如果dump文件中包含slony数据,需要在restore之前做一下处理。
首先把 contactdb_bak库做一个最简单的slony,参考前面的 cluster_setup.sh 脚本,slave也做在同一台机器上就行,因为下载的库是空的,所以set也是空的。
执行修改过的slony初始化脚本。

$ ./cluster_setup.sh

下面的脚本主要是将 dump 文件中特殊slony 对象过滤掉,但是那些有些表里有slony 自动建立的 index,还没办法过滤,后面通过 dropSlonyIindex.sql 来删除。
例如 newtable 表没有主键,slony 会创建一个,这个对象不能通过 contactdb_restore.sh 进行过滤,但可以通过下面的语句删除:

contactdb_bak=> ALTER TABLE newtable DROP COLUMN "_Slony-I_contact_cluster_rowID" CASCADE ;

把所有这样的语句写成一个 dropSlonyIindex.sq 脚本,一次执行。

$ vi contactdb_restore.sh
#!/bin/bash

DUMP="contactdb_20100324_121601.dmp"
DEST="127.0.0.1"
DESTDB="contactdb_bak"
USER="postgres"
CLUSTER="contact_cluster"
JOBS=4

echo Generating contents list...
pg_restore -Fc -l ${DUMP} |sed "s/.*_${CLUSTER}.*/;&/g" > list.txt
echo Starting restore...
pg_restore -j${JOBS} -Fc -O -i --schema="public" -v -L list.txt -h ${DEST} -U ${USER} -d ${DESTDB} ${DUMP}
$ ./contactdb_restore.sh
$ psql contactdb_bak
contactdb_bak=> drop schema "_contact_cluster" cascade;
contactdb_bak=> \i dropSlonyIindex.sql

得到了一个完整的,无 slony 对象的 contactdb_bak。
当然最好在dump的时候就把 slony 的对象全部删掉,这样dump出来的就是一个干净的库。

+ Solaris
在Solaris上安装slony时,指定pg_config命令所在目录,如果没有,需要安装。

$ su -
$ ./configure --with-pgconfigdir=/home/postgres/pgsql/bin
$ /usr/local/bin/make all
$ /usr/local/bin/make install

Pages: 1 2 3 4 5 6 7

Tags: ,
Posted in Technology | No Comments »

Leave a Reply