在升级到Ubuntu 20.04 LTS后,我们将Postgresql 10升级到12的故事

我们提供处理那些无论搜索多少次都找不到的小冷知识。本文是个人观点,与作者所属的任何组织无关。

0. 我已经在Ubuntu上进行了升级到最新版。

这样一来,在Ubuntu 18.04 LTS上,PostgreSQL的版本从10.15升级到了12.5。虽然两个版本可以在不同的端口上运行,但考虑到这个机会,我决定将数据迁移到12版本并进行升级。

我写了关于Ubuntu的更简单的升级方法,因此这个问题有了一个选择。

 

1. 进行数据转储。 dù.)

首先,将目前正在运行的10.15版本的数据进行转储。

首先,使用”su postgres”命令切换到postgres用户,然后使用”pg_dumpall”命令进行数据库转储。
让我们将转储文件保存在/tmp/postgres10-all.dump中。

su postgres
postgres:/tmp$ id
uid=124(postgres) gid=129(postgres) groups=129(postgres),110(ssl-cert)
postgres:/tmp$ pg_dumpall -f /tmp/postgres10-all.dump
postgres:/tmp$ ls -la tmp/
-rw-rw-r--  1 postgres postgres 3709 12月  6 11:57 postgres10-all.dump

2. 停止 PostgreSQL 10.12.

我們接下來要將目前預設運行的10.15停止。

$ systemctl start postgresql
postgresql.service          postgresql@10-main.service  postgresql@12-main.service

看起来有3项注册为服务,让我们停止postgresql@10-main.service。

sudo systemctl stop postgresql@10-main.service
Stopping postgresql (via systemctl): postgresql.service.

将主要配置为运行PostgreSQL 12.5。

为了运行12.5版本的主要任务,需要进行一些工作。

    1. 设置pg_hba.conf

 

    设置postgresql.conf

这里是通常的PostgreSQL使用配置,所以省略。
需要注意的是,为了使10.15和12.5共存,需要注意postgresql.conf文件中的端口与默认值不同的情况。

$ diff /etc/postgresql/12/main/postgresql.conf{.orig,} -C 1
*** /etc/postgresql/12/main/postgresql.conf.orig	2020-12-06 12:25:37.731048837 +0900
--- /etc/postgresql/12/main/postgresql.conf	2020-12-06 12:26:04.507015568 +0900
***************
*** 58,59 ****
--- 58,60 ----

+ listen_addresses = '*'
  #listen_addresses = 'localhost'		# what IP address(es) to listen on;
***************
*** 62,64 ****
  					# (change requires restart)
! port = 5433				# (change requires restart)
  max_connections = 100			# (change requires restart)
--- 63,65 ----
  					# (change requires restart)
! port = 5432				# (change requires restart)
  max_connections = 100			# (change requires restart)

当设置完成后,启动PostgreSQL 12。

sudo systemctl start postgresql@12-main.service
systemctl status postgresql@12-main.service
● postgresql@12-main.service - PostgreSQL Cluster 12-main
     Loaded: loaded (/lib/systemd/system/postgresql@.service; enabled-runtime; vendor preset: enabled)
     Active: active (running) since Sun 2020-12-06 12:15:53 JST; 7min ago
    Process: 2333 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 12-main start (code=exited, status=0/SUCCES>
   Main PID: 2346 (postgres)
      Tasks: 7 (limit: 37802)
     Memory: 21.1M
     CGroup: /system.slice/system-postgresql.slice/postgresql@12-main.service
             ├─2346 /usr/lib/postgresql/12/bin/postgres -D /var/lib/postgresql/12/main -c config_file=/etc/postgresql/12>
             ├─2348 postgres: 12/main: checkpointer
             ├─2349 postgres: 12/main: background writer
             ├─2350 postgres: 12/main: walwriter
             ├─2351 postgres: 12/main: autovacuum launcher
             ├─2352 postgres: 12/main: stats collector
             └─2353 postgres: 12/main: logical replication launcher

4. 还原数据

使用psql命令将数据库恢复为/tmp/postgres10-all.dump文件。

psql -d postgres -f /tmp/postgres10-all.dump
SET
SET
SET
CREATE ROLE
ALTER ROLE
psql:/tmp/postgres10-all.dump:16: ERROR:  role "postgres" already exists
ALTER ROLE
CREATE DATABASE
GRANT
REVOKE
GRANT
You are now connected to database "k3s_db_01" as user "postgres".
SET
SET
SET
SET
SET
SET
 set_config 
------------
(1 row)

SET
SET
SET
SET
CREATE EXTENSION
COMMENT
You are now connected to database "postgres" as user "postgres".
SET
SET
SET
SET
SET
SET
 set_config 
------------
(1 row)

SET
SET
SET
SET
COMMENT
CREATE EXTENSION
COMMENT
You are now connected to database "template1" as user "postgres".
SET
SET
SET
SET
SET
SET
 set_config 
------------
(1 row)

SET
SET
SET
SET
COMMENT
CREATE EXTENSION
COMMENT

5. 总结

尝试以postgres用户重启服务时遇到问题了,
尝试使用错误的端口号连接psql也出了问题,
但除此以外都没有问题。

我认为旧包装以后会被删除。

广告
将在 10 秒后关闭
bannerAds