pg如何进行小版本升级

Posted 瀚高PG实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pg如何进行小版本升级相关的知识,希望对你有一定的参考价值。

瀚高数据库
目录
环境
文档用途
详细信息

环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:14
文档用途
本文以pg14.2升级至pg14.6为例,向各位读者介绍pg小版本升级的方法及步骤。

详细信息

一、背景介绍
当前PostgreSQL版本号由主要版本号和小版本号组成。例如,在版本号10.1中,10是主要版本号,1是小要版本号,这意味着这将是主要版本10的第一个小版本。对于PostgreSQL版本10.0之前的版本,版本号由三个数字组成,例如9.5.3。在这些情况下,主要版本由版本号的前两位数组组成,例如9.5,而小版本是第三个数字,例如3,这意味着这将是主要版本9.5的第三个小版本。

小版本不会更改内部存储格式,并且始终与相同主要版本号的早期和后续小版本兼容。例如,版本10.1与版本10.0和版本10.6兼容。同样的9.5.3与9.5.0、9.5.1和9.5.6兼容。要在兼容版本之间进行更新,只需在数据库服务关闭时更换可执行文件并重新启动服务器即可。数据目录保持不变-小版本升级就这么简单。

以上信息为pg社区官方说明,但在实际的生产环境中,升级前需要详细的阅读各版本的release说明,比如在pg10.19升级至pg10.20的版本介绍中,为了解决一项inde-only扫描的bug,在升级完成后需要s手动重建btree索引。

二、升级步骤归纳

根据PG社区提供的说明,pg小版本升级只需在停止数据库服务后覆盖安装bin目录下的可执行命令即可,但在实际的操作过程中,推荐读者首先阅读个版本的升级说明,看是否有一些升级后续的操作事宜。pg小版本升级在具体的生产环境中的过程主要分为以下两种场景:

场景一、数据库的安装目录、数据目录未包含版本号,如/usr/local/pgsql/bin /usr/local/pgsql/data

在这种场景下,只需要规划新的安装路径,编译安装好新版本数据库,停止旧版本数据库服务后,将新版本数据库的bin目录内的文件copy到/usr/local/pgsql/bin下覆盖,启动数据库即可。如果设置了pg的开机自启服务,pg的开机自启服务文件也不需要修改。

场景二、数据库的安装目录、数据目录均包含版本号,如/usr/local/pg14.2/bin /usr/local/pg14.2/data

在这种情景下,编译安装新版本数据库,停止旧版本数据库,将旧版本数据库的数据目录移动到新装的数据库的对应路径,启动该数据库即可。此种场景下需要修改环境变量信息,另外如果设置了pg的开机自启服务,还需要修改对应的service文件,防止开机自启服务失效。

三、小版本升级示例

场景一过程简单,下面以第二种场景作为示例给读者演示下pg14.2升级到pg14.6的升级过程

1、平台信息

pg版本 pg14.2 pg14.6

OS版本:Redhat 7.7

CPU型号:X86_64

2、升级前环境变量信息

[postgres@mode2 ~]$ cat ~/.bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

    . ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

export PATH=/data/pg14.2/bin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH

export PGHOME=/data/pg14.2

export PGDATA=$PGHOME/data

export PGPORT=5432

export PGUSER=postgres

export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/lib/:$LD_LIBRARY_PATH

3、pg14.2数据库明细

[postgres@mode2 ~]$ psql

psql (14.2)

Type "help" for help.

postgres=# \\l+

                                                                    List of databases

   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description                 

-----------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------

 a         | a        | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |                       | 189 MB  | pg_default | 

 postgres  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |                       | 55 MB   | pg_default | default administrative connection database

 template0 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +| 8433 kB | pg_default | unmodifiable empty database

           |          |          |             |             | postgres=CTc/postgres |         |            | 

 template1 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | postgres=CTc/postgres+| 8561 kB | pg_default | default template for new databases

           |          |          |             |             | =c/postgres           |         |            | 

(4 rows)

postgres=# \\dx

                                       List of installed extensions

        Name        | Version |   Schema   |                         Description                          

--------------------+---------+------------+--------------------------------------------------------------

 dblink             | 1.2     | public     | connect to other PostgreSQL databases from within a database

 pg_profile         | 0.3.6   | public     | PostgreSQL load profile repository and report builder

 pg_stat_statements | 1.9     | public     | track execution statistics of all SQL statements executed

 plpgsql            | 1.0     | pg_catalog | PL/pgSQL procedural language

(4 rows)

postgres=# \\c a a

You are now connected to database "a" as user "a".

a=> \\dx

                                    List of installed extensions

  Name   | Version |   Schema   |                            Description                            

---------+---------+------------+-------------------------------------------------------------------

 pg_trgm | 1.6     | public     | text similarity measurement and index searching based on trigrams

 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language

(2 rows)

a=> \\dt+

                                       List of relations

 Schema |       Name       | Type  | Owner | Persistence | Access method |  Size  | Description 

--------+------------------+-------+-------+-------------+---------------+--------+-------------

 public | ch               | table | a     | permanent   | heap          | 79 MB  | 

 public | pgbench_accounts | table | a     | permanent   | heap          | 15 MB  | 

 public | pgbench_branches | table | a     | permanent   | heap          | 288 kB | 

 public | pgbench_history  | table | a     | permanent   | heap          | 12 MB  | 

 public | pgbench_tellers  | table | a     | permanent   | heap          | 416 kB | 

 public | t                | table | a     | permanent   | heap          | 472 kB | 

 public | t1               | table | a     | permanent   | heap          | 448 kB | 

 public | t2               | table | a     | permanent   | heap          | 448 kB | 

(8 rows)

a=> select count(*) from ch ;

  count  

---------

 1210000

(1 row)

a=> select * from ch limit 1;

 id |        hanzi         | num 

----+----------------------+-----

 54 | 鵶獷跌緗鉄燴聀鋧扴鄨 |   1

(1 row)

a=> select * from ch where num=1;

 id |        hanzi         | num 

----+----------------------+-----

 54 | 鵶獷跌緗鉄燴聀鋧扴鄨 |   1

 56 | 扝噲蹘傝膷倱蕠鷦前哆 |   1

 10 | 輨墦嬮牛鞑鶓欄鍷捻奉 |   1

 91 | 刂唹錒浣酂锵透热壾氃 |   1

(4 rows)

4、解压缩安装pg14.6,修改安装文件属主

[root@mode2 download]# tar -zxvf postgresql-14.6.tar.gz

[root@mode2 download]# cd postgresql-14.6/

##编译安装过程略

[root@mode2 postgresql-14.6]# ./configure --prefix=/data/pg14.6 --with-perl --with-python --with-openssl --with-readline --with-libxml --with-libxslt

[root@mode2 postgresql-14.6]#  make world -j 4 && make install-world -j 4

##修改安装完成后的文件属主为postgres

[root@mode2 postgresql-14.6]# chown -R postgres:postgres /data/pg14.6 

[root@mode2 postgresql-14.6]# ll /data/pg14.6

总用量 12

drwxr-xr-x 2 postgres postgres 4096 127 17:18 bin

drwxr-xr-x 4 postgres postgres 4096 127 17:18 include

drwxr-xr-x 4 postgres postgres 4096 127 17:18 lib

drwxr-xr-x 5 postgres postgres   46 127 17:18 share

5、停止pg14.2数据库

[postgres@mode2 ~]$ pg_ctl stop

waiting for server to shut down....2022-12-07 17:27:21.298 CST [13677] LOG:  received fast shutdown request

2022-12-07 17:27:21.298 CST [13677] LOG:  aborting any active transactions

2022-12-07 17:27:21.299 CST [13677] LOG:  background worker "logical replication launcher" (PID 13684) exited with exit code 1

2022-12-07 17:27:21.299 CST [13679] LOG:  shutting down

2022-12-07 17:27:21.306 CST [13677] LOG:  database system is shut down

 done

server stopped

6、拷贝data目录到新版本数据库数据目录下

[postgres@mode2 pg14.2]$ cp -rf data /data/pg14.6/

[postgres@mode2 pg14.2]$ vi ~/.bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

    . ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

export PATH=/data/pg14.6/bin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH

export PGHOME=/data/pg14.6

export PGDATA=$PGHOME/data

export PGPORT=5432

export PGUSER=postgres

export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/lib/:$LD_LIBRARY_PATH

[postgres@mode2 pg14.2]$ source ~/.bash_profile

7、核对版本信息、数据库数据

[postgres@mode2 pg14.2]$ pg_ctl start

waiting for server to start....2022-12-07 18:12:55.516 CST [14453] LOG:  starting PostgreSQL 14.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit

2022-12-07 18:12:55.516 CST [14453] LOG:  listening on IPv6 address "::1", port 5432

2022-12-07 18:12:55.516 CST [14453] LOG:  listening on IPv4 address "127.0.0.1", port 5432

2022-12-07 18:12:55.518 CST [14453] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"

2022-12-07 18:12:55.541 CST [14454] LOG:  database system was shut down at 2022-12-07 18:10:47 CST

2022-12-07 18:12:55.545 CST [14453] LOG:  database system is ready to accept connections

 done

server started

[postgres@mode2 ~]$ psql

psql (14.6)

Type "help" for help.

postgres=# select version();

                                                 version                                                 

---------------------------------------------------------------------------------------------------------

 PostgreSQL 14.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit

(1 row)

postgres=# \\l+

                                                                    List of databases

   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description                 

-----------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------

 a         | a        | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |                       | 190 MB  | pg_default | 

 postgres  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |                       | 55 MB   | pg_default | default administrative connection database

 template0 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +| 8433 kB | pg_default | unmodifiable empty database

           |          |          |             |             | postgres=CTc/postgres |         |            | 

 template1 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | postgres=CTc/postgres+| 8561 kB | pg_default | default template for new databases

           |          |          |             |             | =c/postgres           |         |            | 

(4 rows)

postgres=# \\c a a

You are now connected to database "a" as user "a".

a=> select * from ch where num=1;

 id |        hanzi         | num 

----+----------------------+-----

 54 | 鵶獷跌緗鉄燴聀鋧扴鄨 |   1

 56 | 扝噲蹘傝膷倱蕠鷦前哆 |   1

 91 | 刂唹錒浣酂锵透热壾氃 |   1

 10 | 輨墦嬮牛鞑鶓欄鍷捻奉 |   1

(4 rows)

a=> \\dx

                                    List of installed extensions

  Name   | Version |   Schema   |                            Description                            

---------+---------+------------以上是关于pg如何进行小版本升级的主要内容,如果未能解决你的问题,请参考以下文章

pg如何进行小版本升级

postgresql如何升级版本

PostgreSQL升级之pg_upgrade升级

postgresql大版本升级

postgresql 数据库小版本更新

利用pg_upgrade更新数据库(从8.4升级到9.5)