在升级到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版本的主要任务,需要进行一些工作。
-
- 设置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也出了问题,
但除此以外都没有问题。
我认为旧包装以后会被删除。