postgresql升级有三种方式:pg_dump与restore,pg_upgrade,pg的Logical Replication,本文主要讲述pg_upgrade方式
步骤:
1.下载并安装新版数据库
下载:https://ftp.postgresql.org/pub/source/
安装:
cd /data/soft/ tar vxf postgresql-11.2.tar.gz cd postgresql-11.2 #新数据库的监听端口不要与旧数据库监听端口相同 ./configure --prefix=/usr/local/pgsql112 --with-pgport=5433 make -j `grep processor /proc/cpuinfo |wc -l` make install
2.初始化新数据库
#创建新的数据文件目录 mkdir /pgdata/data112 chown -R postgres.postgres /pgdata/data112 su - postgres cd /usr/local/pgsql112/ #字符集需要与旧库的字符集相同 #pgsql -l可以查看数据库字符集 #如果不设置locale,那么与运行initdb的系统环境中的locale相同,可以通过locale -a查看可用的locale,locale包含货币,日期,字符集等内容,-E制定字符集 ./initdb -D /pgdata/data112/ -U postgres
3.新旧数据库修改pg_hba.conf
在新旧数据库的升级过程中,新旧数据库会互相连接,为避免频繁认证,修改本地postgres认证
vi pg_hba.conf ################################################# # "local" is for Unix domain socket connections only local all all trust #修改为 # "local" is for Unix domain socket connections only local all postgres trust
4.停掉旧数据库
/usr/local/pgsql10.4/bin/pg_ctl stop -D /pgdata/data
5.使用pg_upgrade开始升级
5.1.创建升级目录
這個目錄postgres要有權限,并且不能夠在數據庫文件目錄中
$ cd /tmp
$ mkdir upgrade_log
5.2.升级前检查
$ /usr/local/pgsql112/bin/pg_upgrade -c -b /usr/local/pgsql104/bin -B /usr/local/pgsql112/bin -d /pgdata/data -D /pgdata/data112 -p 5432 -P 5433
小写字母之后都是旧数据库的,大写字母之后都是新数据库的,使用新数据库的pg_upgrade程序
5.3.升级
不适用--link方式,即将旧数据库的文件copy到新数据库目录中,使用link的话,不需要copy,直接使用硬链接
$ /usr/local/pgsql112/bin/pg_upgrade -b /usr/local/pgsql104/bin -B /usr/local/pgsql112/bin -d /pgdata/data -D /pgdata/data112 -p 5432 -P 5433
或
$ /usr/local/pgsql112/bin/pg_upgrade --link -b /usr/local/pgsql104/bin -B /usr/local/pgsql112/bin -d /pgdata/data -D /pgdata/data112 -p 5432 -P 5433
5.4.执行上一步生成的两个文件
上一步执行之后,会在当前目录下生成两个文件,一个收集统计信息,一个删除旧数据文件,根据实际情况执行
./analyze_new_cluster.sh
./delete_old_cluster.sh
6.修改配置文件,环境变量等
7.插件的升级
如果旧数据库安装了插件,那么在5.1检查的过程中会报错
7.1.查看旧数据库的插件
$ psql
postgres=# \dx
7.2.卸载插件
postgres=# drop extenions extension_name
7.3.升级完成后重新安装插件
原文地址:https://www.cnblogs.com/monkey6/p/10456580.html