新版本的
PostgreSQL
的内部数据存储格式可能会
发生改变.因此,
如果你正在升级一个版本号不象
"7.2.x"
这样的系统,
你就必须按照这里说的方法备份和恢复你的数据.
这些指导假设你现有的安装在
/usr/local/pgsql
目录里面,
并且数据区在
/usr/local/pgsql/data
.
根据你的情况修改这些路径.
-
确保你在备过程中和备份后没有更新.
虽然即使有数据更新也不会影响备份的完整性,但是很明显
更新的数据会被排除在备份之外,而它是应该包括进来的.如果有必要,
可以编辑文件
/usr/local/pgsql/data/pg_hba.conf
或等效的文件中的权限以禁止除你之外的所有人的访问.
-
要倾倒出你的数据库安装,敲入:
pg_dumpall >
outputfile
如果你需要保留 OID(比如说当你用到它们做外键时),那么在
运行
pg_dumpall
时带-o选项.
pg_dumpall
并不保存大对象.
如果你要保存大对象,请检查
Section 9.1.4
确保你使用的
pg_dumpall
命令的就是
你正在运行的数据库版本 7.2 里面的.
不应该把
pg_dumpall
用于旧的数据库.
-
如果你准备把新版本的数据库装在与旧数据库相同的位置,那么
关闭旧的数据库服务器,(至少在安装新文件之前如此):
kill -INT `cat /usr/local/pgsql/data/postmaster.pid`
在 7.0 以前的版本没有这个
postmaster.pid
文件.如果你用的是这样的版本
那你就得自己把数据库服务器的进程号找出来,比如通过这样的
命令
ps ax | grep postmaster
,然后
把进程号交给
kill
命令.
在那些在引导的时候就启动
PostgreSQL
的系统上,可能已经有一个启动文件可以干这件事.
例如,在一台
Red Hat Linux
系统上我们可以找到
/etc/rc.d/init.d/postgresql stop
是可以用的.另外一个可能是
pg_ctl stop
.
-
如果你准备装在老版本的地盘,那么把它们挪走也是一条好计策,
以便你碰到麻烦后还能退回去.用这样的命令:
mv /usr/local/pgsql /usr/local/pgsql.old
当你装完
PostgreSQL
7.2,创建一个新的数据库目录
然后启动新服务器.要记住你必须用特殊的数据库用户登录后才能执行
这些命令(如果你是升级的话这个帐户应该已经存在了).
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
最后,使用
新的
psql
,
用下面命令恢复你的数据:
/usr/local/pgsql/bin/psql -d template1 -f
outputfile
.
你还可以通过并行安装新旧版本的方法来减少停业时间(downtime).
下面这些文章比较详细地讨论了这个问题:
Section 9.3
,,
不管你是否一定需要这样做,我们都建议你好好读一下.
|