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

如何在不丢失openproject数据的情况下将postgresql数据库从10升级到12,postgresql,ubuntu-18.04,openproject,Postgresql,Ubuntu 18.04,Openproject,我的OpenProject管理软件安装了默认的postgresql 10。 目前postgresql数据库是12,它有很多新特性 我想升级我的Postgres数据库而不丢失数据库中的数据。 我的系统是Ubuntu18.04,托管openproject 我在网上搜索,找不到一步一步升级postgresql的方法 你能指导我安装新的数据库和所有数据应该在新的数据库。 谢谢你的帮助 备份数据库 psql --version sudo -u postgres psql pg_dumpall > a

我的OpenProject管理软件安装了默认的postgresql 10。 目前postgresql数据库是12,它有很多新特性

我想升级我的Postgres数据库而不丢失数据库中的数据。 我的系统是Ubuntu18.04,托管openproject

我在网上搜索,找不到一步一步升级postgresql的方法

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

  • 备份数据库
    psql --version sudo -u postgres psql pg_dumpall > alldbs.sql
    
    (此命令将备份postgresql数据库中的所有数据库)
  • 然后退出postgres用户,然后:

  • 在终端内部运行以下命令:

    sudo systemctl stop postgres
    sudo apt get安装-y postgresql-12 postgresql-server-dev-12 postgresql-contrib-12 libpq dev postgresql-12-g
    sudo pg_dropcluster 12主-停止
    sudo pg_升级集群10主
    sudo pg_dropcluster 10主-停止
    
  • 重新启动postgresql服务:

    sudo systemctl restart postgresql
    
  • 登录postgres:

    su - postgres
    
  • 要检查版本,请执行以下操作:

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

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

  • 以postgres用户身份登录
  • 为所有数据库中的所有数据创建一个backup.sql文件
  • B)升级到PostgreSQL12

  • 更新软件包并安装postgres 12
  • 停止postgresql服务
  • 迁移数据
  • 切换到普通用户
  • 交换旧版本和新版本的postgres端口
  • 启动postgresql服务
  • 以postgres用户身份登录
  • 检查你的新postgres版本
  • 运行生成的新集群脚本
  • 以普通(默认用户)用户身份返回并清理旧版本的混乱
  • 恭喜!您的postgresql版本现在已升级,如果在B中一切正常,我们不必应用备份,因为我们已经将数据从旧版本迁移到新版本,备份只是为了防止出现任何问题
  • 注意:根据需要更改postgresql.conf和pg_hba.conf

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

    Postgresql升级使用pg\U升级 步骤-1(查找源Postgresql server的区域设置语言和编码)
    • 以postgres用户身份登录Postgresql数据库
    • 执行查询
      SHOW LC\u COLLATE
    步骤-2(停止现有/源Postgresql server)
    • 使用
      $sudo systemctl list units | grep postgres
    • 停止服务
      $sudo service postgresql-。服务停止
    步骤-3(安装目标Postgresql server)
    • 配置repos并安装(谷歌提供了大量教程)
    步骤-4(更新区域设置语言和编码) 如果可以,我们可以进入下一步,如果不可以,请在继续下一步之前解决问题 预期输出:群集兼容

    步骤-6(使用链接选项将源代码升级到目标Postgresql版本)
    • 链接选项比迁移要快得多
    • 以postgres用户身份运行命令,
      $sudo su postgres
    $/usr/pgsql-/bin/pgu升级--旧bindir/usr/pgsql-/bin--新bindir/usr/pgsql-/bin--旧datadir/var/lib/pgsql//data--新datadir/var/lib/pgsql//data--链接
    
    预期输出:升级完成

    谢谢。
    享受

    pg_升级
    或使用转储和还原:刚刚完成所有步骤!这必须标记为解决方案!如何还原backup.sql文件。这会恢复postgres中的所有DB吗?请注意在WSL上执行此操作的任何人,在运行
    pgu升级之前键入
    cd~
    。否则你会遇到权限问题,因为它试图在Windows文件系统中执行Linux权限操作,但失败了。这很好,它甚至可以与postgresql 13 o//一起使用。我必须在一个可由用户写入的目录中
    postgres
    才能在我的Ubuntu Linux系统上使用它。我先切换到
    cd/tmp
    ,然后才切换到
    sudo su postgres
    ,然后运行正常。否则,我将得到一个
    无法打开日志文件“pg\u upgrade\u internal.log”
    错误。在我看来,这应该是可以接受的答案,可以重新加载您执行的数据psql-f db.out postgres
        sudo su postgres
    
        pg_dumpall > backup.sql
    
         sudo apt-get update
         sudo apt-get install postgresql-12 postgresql-server-dev-12
    
         sudo systemctl stop postgresql.service
    
         /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'
    
         exit
    
         sudo vim /etc/postgresql/12/main/postgresql.conf
         #change port to 5432
         sudo vim /etc/postgresql/10/main/postgresql.conf
         #change port to 5433
    
         sudo systemctl start postgresql.service
    
         sudo su postgres
    
         psql -c "SELECT version();"
    
         ./analyze_new_cluster.sh
    
         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
    
    $ /usr/pgsql-<target-version>/bin/initdb -D /var/lib/pgsql/<target-version>/data --locale=<add-your-encoding>
    
      $  /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
    
        $ /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