如何在不丢失OpenProject数据的情况下将Postgresql数据库从10升级到12

时间:2020-02-26 08:22:49

标签: postgresql ubuntu-18.04 openproject

我的OpenProject管理软件与默认的postgresql 10一起安装。 当前postgresql数据库为12,它具有许多新功能。

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

我搜索了Internet,但找不到逐步升级Postgresql的方法。

能否请您指导我安装新的数据库,并且所有数据都应位于新的数据库中。 谢谢您的帮助。

3 个答案:

答案 0 :(得分:27)

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版本的端口。
     sudo vim /etc/postgresql/12/main/postgresql.conf
     #change port to 5432
     sudo vim /etc/postgresql/10/main/postgresql.conf
     #change port to 5433
  1. 启动postgresql服务
     sudo systemctl start postgresql.service
  1. 以postgres用户身份登录
     sudo su postgres
  1. 检查新的postgres版本
     psql -c "SELECT version();"
  1. 运行生成的新集群脚本
     ./analyze_new_cluster.sh
  1. 以普通用户(默认用户)身份返回并清理旧版本的混乱情况
     sudo apt-get remove postgresql-10 postgresql-server-dev-10
     #uninstalls postgres packages
     sudo rm -rf /etc/postgresql/10/
     #removes the old postgresql directory
     sudo su postgres
     #login as postgres user
     ./delete_old_cluster.sh
     #delete the old cluster data
  1. 腐败!您的postgresql版本现在已升级,如果B一切正常,我们不必应用备份,因为我们已经将数据从旧版本迁移到了新版本,因此备份是为了防万一。 li>

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

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

答案 1 :(得分:7)

  1. 备份数据库
    psql --version sudo -u postgres psql pg_dumpall > alldbs.sql
    
    (此命令将从PostgreSQL数据库中备份所有数据库)

然后退出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
    

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

答案 2 :(得分:0)

使用pg_upgrade升级Postgresql

步骤-1(查找源Postgresql服务器的语言环境和编码)

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

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

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

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

  • 配置存储库并安装(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

预期输出:升级完成

谢谢。 享受!!!