本文为小版本升级案例演示
PostgreSQL每次的小版本升级不会改变内部的存储格式,不会改变数据目录, 并且总是向上兼容同一主版本, 例如9.6.2与9.6.1总是兼容的, 以此类推,9.6.3与9.6.2也是兼容的,无论他们之间跨越了几个小版本。 升级小版本也很简单, 只需安装新的可执行文件, 并重新启动数据库实例。
本次文档演示的版本为11.1升级到11.7
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 11.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23), 64-bit
(1 row)
postgres=#
首先检查当前的安装位置,在原来的安装位置覆盖安装新服务器版本即可
[postgres@postgres bin]$ which psql
/opt/pgsql11/bin/psql
[postgres@postgres bin]$ cd /opt/pgsql11/
[postgres@postgres pgsql11]$ ls
bin include lib share
[postgres@postgres pgsql11]$ pwd
/opt/pgsql11
[postgres@postgres pgsql11]$
tar -cvf /opt/pgsql11.tar /opt/pgsql11
解压时包含绝对路径
https://ftp.postgresql.org/pub/source/
https://www.postgresql.org/ftp/source/
root用户
mkdir -p /opt/soft
cd /opt/soft/
tar -xvf postgresql-11.7.tar.gz
root用户
cd /opt/soft/postgresql-11.7
./configure --prefix=/opt/pgsql11 --with-pgport=5442 --with-perl --with-tcl --with-openssl --with-pam --without-ldap --with-libxml --with-libxslt --enable-thread-safety --with-wal-blocksize=8 --with-blocksize=8 --enable-dtrace --enable-debug --enable-cassert
配置的参数文件可以参考11.1版本安装时的参数
[root@postgres postgresql-11.1]#
[root@postgres postgresql-11.1]# pwd
/opt/soft_bak/postgresql-11.1
[root@postgres postgresql-11.1]# ls -ltr config.log
-rw-rw-r-- 1 postgres postgres 470854 Dec 19 2018 config.log
[root@postgres postgresql-11.1]# more config.log
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by PostgreSQL configure 11.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ ./configure --prefix=/opt/pgsql11 --with-pgport=5442 --with-perl --with-tcl --with-openssl --with-pam --without-ldap --with-libxml --with-libxslt --enable-thread-safety --with-wal-blocksize=8 --with-blocksize=8 --enable-dtrace --enable-debug --enable-cassert
## --------- ##
## Platform. ##
## --------- ##
或者参考
[root@postgres pgsql11]# pg_config
BINDIR = /opt/pgsql9.3.4/bin
DOCDIR = /opt/pgsql9.3.4/share/doc
HTMLDIR = /opt/pgsql9.3.4/share/doc
INCLUDEDIR = /opt/pgsql9.3.4/include
PKGINCLUDEDIR = /opt/pgsql9.3.4/include
INCLUDEDIR-SERVER = /opt/pgsql9.3.4/include/server
LIBDIR = /opt/pgsql9.3.4/lib
PKGLIBDIR = /opt/pgsql9.3.4/lib
LOCALEDIR = /opt/pgsql9.3.4/share/locale
MANDIR = /opt/pgsql9.3.4/share/man
SHAREDIR = /opt/pgsql9.3.4/share
SYSCONFDIR = /opt/pgsql9.3.4/etc
PGXS = /opt/pgsql9.3.4/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/opt/pgsql9.3.4' '--with-pgport=5432' '--with-perl' '--with-tcl' '--with-python' '--with-openssl' '--with-pam' '--without-ldap' '--with-libxml' '--with-libxslt' '--enable-thread-safety' '--with-wal-blocksize=8' '--with-blocksize=8' '--enable-dtrace' '--enable-debug' '--enable-cassert'
CC = gcc
CPPFLAGS = -D_GNU_SOURCE -I/usr/include/libxml2
CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -g
CFLAGS_SL = -fpic
LDFLAGS = -L../../../src/common -Wl,--as-needed -Wl,-rpath,'/opt/pgsql9.3.4/lib',--enable-new-dtags
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgport -lpgcommon -lxslt -lxml2 -lpam -lssl -lcrypto -lz -lreadline -lcrypt -ldl -lm
VERSION = PostgreSQL 9.3.4
[root@postgres pgsql11]#
make
make install
重启数据库验证升级
安装完可执行文件后, 可以不必立即重启数据库服务器。在重启数据库服务之前, 升级并不会立即生效。 可以有计划地在数据库的维护窗口期间对数据库服务器进行重启。
[postgres@postgres ~]$ psql -h 127.0.0.1 -p 5442
psql (11.7, server 11.1)
Type "help" for help.
postgres=#
在重启之前, 可以看到命令提示符处显示, psql客户端的版本已经升级到了11.7, 但server的版本还是11.1, 这里应当注意理解和区分命令行中psql客户端的版本和server端的版本。
[postgres@postgres ~]$ pg_ctl restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2020-09-02 23:22:04.021 EDT [4444] LOG: listening on IPv4 address "0.0.0.0", port 5442
2020-09-02 23:22:04.021 EDT [4444] LOG: listening on IPv6 address "::", port 5442
2020-09-02 23:22:04.022 EDT [4444] LOG: listening on Unix socket "/tmp/.s.PGSQL.5442"
2020-09-02 23:22:04.036 EDT [4444] LOG: redirecting log output to logging collector process
2020-09-02 23:22:04.036 EDT [4444] HINT: Future log output will appear in directory "log".
done
server started
[postgres@postgres ~]$ psql -h 127.0.0.1 -p 5442
psql (11.7)
Type "help" for help.
postgres=#
重启之后再检查服务器的版本, server端才会升级到11.7。
