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

viv*_*lan 27 postgresql openproject ubuntu-18.04

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

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

我在网上搜索,找不到升级 postgresql 的步骤。

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

Pav*_*ani 74

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

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

B) 升级到 PostgreSQL12

  1. 更新软件包并安装 postgres 12
     sudo apt-get update
     sudo apt-get install postgresql-12 postgresql-server-dev-12
Run Code Online (Sandbox Code Playgroud)
  1. 停止 postgresql 服务
     sudo systemctl stop postgresql.service
Run Code Online (Sandbox Code Playgroud)
  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'
Run Code Online (Sandbox Code Playgroud)
  1. 切换到普通用户
     exit
Run Code Online (Sandbox Code Playgroud)
  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
Run Code Online (Sandbox Code Playgroud)
  1. 启动 postgresql 服务
     sudo systemctl start postgresql.service
Run Code Online (Sandbox Code Playgroud)
  1. 以 postgres 用户身份登录
     sudo su postgres
Run Code Online (Sandbox Code Playgroud)
  1. 检查您的新 postgres 版本
     psql -c "SELECT version();"
Run Code Online (Sandbox Code Playgroud)
  1. 运行生成的新集群脚本
     ./analyze_new_cluster.sh
Run Code Online (Sandbox Code Playgroud)
  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
Run Code Online (Sandbox Code Playgroud)
  1. 恭喜!您的 postgresql 版本现已升级,如果在 B 中一切正常,我们不必应用备份,因为我们已经将数据从旧版本迁移到新版本,备份以防万一出现问题。

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

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

  • 对于在 WSL 上执行此操作的任何人来说,请注意,在运行“pg_upgrade”之前输入“cd ~”。否则你会遇到权限问题,因为它尝试在 Windows 文件系统中执行 Linux 权限操作并失败 (5认同)
  • 我必须位于用户“postgres”可写的目录中才能在我的 Ubuntu Linux 系统上使用它。我在“sudo su postgres”之前切换到“cd /tmp”,然后运行良好。否则,我会收到“无法打开日志文件“pg_upgrade_internal.log””错误。 (4认同)
  • 这太棒了,它甚至可以与 postgresql 13 o// 一起使用。 (3认同)

viv*_*lan 21

  1. 备份数据库
    psql --version sudo -u postgres psql pg_dumpall > alldbs.sql
    
    Run Code Online (Sandbox Code Playgroud) (此命令将从 postgresql db 备份所有数据库)

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

  1. 在终端内运行这些命令:

    psql --version sudo -u postgres psql pg_dumpall > alldbs.sql
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重启 postgresql 服务:

    sudo systemctl restart postgresql
    
    Run Code Online (Sandbox Code Playgroud)
  3. 登录postgres:

    su - postgres
    
    Run Code Online (Sandbox Code Playgroud)
  4. 检查版本:

    psql --version
    
    Run Code Online (Sandbox Code Playgroud)

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