29

我的 OpenProject 管理软件安装了默认的 postgresql 10。目前 postgresql DB 是 12,它有很多新功能。

我想升级我的 Postgres 数据库而不丢失数据库中的数据。我的系统是 ubuntu 18.04 并托管了 openproject。

我搜索了互联网,找不到逐步升级postgresql的步骤。

你能指导我安装新数据库吗?所有数据都应该在新数据库中。谢谢你的帮助。

4

3 回答 3

94

A)首先为此创建所有数据库的备份(如果不需要备份,您可以从 B 继续)

  1. 以 postgres 用户身份登录
sudo su postgres
  1. 为所有数据库中的所有数据创建一个备份 .sql 文件
pg_dumpall > backup.sql

B) 升级到 PostgreSQL12

  1. 更新软件包并安装 postgres 12
sudo apt-get update
sudo apt-get install postgresql-12 postgresql-server-dev-12
  1. 停止 postgresql 服务
sudo systemctl stop postgresql.service
  1. 迁移数据
/usr/lib/postgresql/12/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/10/main \
--new-datadir=/var/lib/postgresql/12/main \
--old-bindir=/usr/lib/postgresql/10/bin \
--new-bindir=/usr/lib/postgresql/12/bin \
--old-options '-c config_file=/etc/postgresql/10/main/postgresql.conf' \
--new-options '-c config_file=/etc/postgresql/12/main/postgresql.conf'
  1. 切换到普通用户
exit
  1. 交换新旧 postgres 版本的端口。
#change port to 5432
sudo vim /etc/postgresql/12/main/postgresql.conf
#change port to 5433
sudo vim /etc/postgresql/10/main/postgresql.conf
  1. 启动postgresql服务
sudo systemctl start postgresql.service
  1. 以 postgres 用户身份登录
sudo su postgres
  1. 检查你的新 postgres 版本
psql -c "SELECT version();"
  1. 运行生成的新集群脚本
./analyze_new_cluster.sh
  1. 以普通(默认用户)用户身份返回并清理旧版本的烂摊子
#uninstalls postgres packages     
sudo apt-get remove postgresql-10 postgresql-server-dev-10
#removes the old postgresql directory
sudo rm -rf /etc/postgresql/10/
#login as postgres user
sudo su postgres
#delete the old cluster data
./delete_old_cluster.sh
  1. 恭喜!您的 postgresql 版本现已升级,如果在 B 中一切正常,我们不必应用备份,因为我们已经将数据从旧版本迁移到新版本,备份以防万一出现问题。

注意:根据您的要求更改 postgresql.conf 和 pg_hba.conf

PS:请随意评论您的问题、建议或您想提出的任何其他修改

于 2020-06-04T15:55:52.723 回答
22
  1. 备份数据库
    psql --version sudo -u postgres psql pg_dumpall > alldbs.sql
    
    (此命令将从 postgresql db 备份所有数据库)

然后从 postgres 用户退出,然后:

  1. 在终端内运行以下命令:

    sudo systemctl stop postgres
    sudo apt-get install -y postgresql-12 postgresql-server-dev-12 postgresql-contrib-12 libpq-dev postgresql-12-hypopg
    sudo pg_dropcluster 12 main --stop
    sudo pg_upgradecluster 10 main
    sudo pg_dropcluster 10 main --stop
    
  2. 重启 postgresql 服务:

    sudo systemctl restart postgresql
    
  3. 登录到 postgres:

    su - postgres
    
  4. 检查版本:

    psql --version
    

我已经完成了上述步骤,我可以更新数据库并恢复所有数据。

于 2020-04-14T13:11:53.713 回答
3

使用 pg_upgrade 进行 Postgresql 升级

步骤 - 1(查找源 Postgresql 服务器的区域设置语言和编码)

  • 以 postgres 用户身份登录 Postgresql 数据库
  • 执行查询SHOW LC_COLLATE;

步骤 - 2(停止现有/源 Postgresql 服务器)

  • 使用查找正在运行的 Postgresql 服务$ sudo systemctl list-units | grep postgres
  • 停止服务$ sudo service postgresql-<source-version>.service stop

步骤 - 3(安装目标 Postgresql 服务器)

  • 配置 repos 并安装(google 中有很多教程)

步骤 - 4(更新区域设置语言和编码)

$ /usr/pgsql-<target-version>/bin/initdb -D /var/lib/pgsql/<target-version>/data --locale=<add-your-encoding>

步骤 - 5(检查源到目标升级是否有任何潜在问题)

  • 以 postgres 用户身份运行命令,$sudo su postgres
  $  /usr/pgsql-<target-version>/bin/pg_upgrade --old-bindir /usr/pgsql-<source-version>/bin --new-bindir /usr/pgsql-<target-version>/bin --old-datadir /var/lib/pgsql/<source-version>/data --new-datadir /var/lib/pgsql/12/data --link --jobs=2 --check

如果没问题,我们可以进行下一步,如果没有在继续下一步之前解决问题预期输出:集群兼容

步骤 - 6(使用链接选项将源升级到目标 Postgresql 版本)

  • 链接选项比迁移快得多
  • 以 postgres 用户身份运行命令,$sudo su postgres
    $ /usr/pgsql-<target-version>/bin/pg_upgrade --old-bindir /usr/pgsql-<source-version>/bin --new-bindir /usr/pgsql-<target-version>/bin --old-datadir /var/lib/pgsql/<source-version>/data --new-datadir /var/lib/pgsql/<target-version>/data --link

预期输出:升级完成

谢谢。请享用 !!!

于 2020-10-21T12:32:30.330 回答