如何将 docker postgres 映像 10.3 中的 pg_restore 升级到 10.5

How to upgrade the pg_restore in docker postgres image 10.3 to 10.5

我使用 tableplus 作为我的总管理员。

目前正在使用 10.3 的 docker postgres 映像进行生产和本地主机开发。

因为 tableplus 将他们的 postgres 10 驱动程序升级到 10.5,我不能再使用 pg_restore 来恢复使用 10.5 转储的备份文件 --format=custom

参见图片了解我如何使用 tableplus 进行备份。以及它如何使用 10.5 驱动程序

我收到的错误信息是pg_restore: [archiver] unsupported version (1.14) in file header

我试过的

我尝试在 localhost 中简单地将 docker 文件中的 postgres 标签从 10.3 更改为 10.5,但没有成功

原始docker文件

FROM postgres:10.3

COPY ./maintenance /usr/local/bin/maintenance
RUN chmod +x /usr/local/bin/maintenance/*
RUN mv /usr/local/bin/maintenance/* /usr/local/bin \
    && rmdir /usr/local/bin/maintenance

FROM postgres:10.5

COPY ./maintenance /usr/local/bin/maintenance
RUN chmod +x /usr/local/bin/maintenance/*
RUN mv /usr/local/bin/maintenance/* /usr/local/bin \
    && rmdir /usr/local/bin/maintenance

我的开发主机系统是 macOS。

我的开发中有许多现有的数据库和模式 docker postgres。所以我目前对如何在不破坏旧数据的情况下安全升级感到困惑。

可以指教吗?

此外,我认为一个长期的目标是弄清楚如何在 docker 之外(即在我的主机系统内)拥有数据文件,以便每次我想为 postgres 升级我的 docker 图像时我可以毫无恐惧地安全地这样做。

我也想问一下如何切换到这样的设置。

如果我的理解正确,您想将使用 10.5 获取的自定义格式转储恢复到 10.3 数据库中。

如果存档格式在 10.3 和 10.5 之间发生变化,那将不可能。

作为解决方法,您可以使用没有“存档版本”的“纯格式”转储(选项 --format=plain)。但是恢复期间的任何问题都由您来处理,因为不支持降级 PostgreSQL。

开发和生产应始终使用相同的版本,并且应始终使用最新的次要版本(当前为 10.13)。其他都是自找麻烦

  1. 像这样备份为纯文本:警告!该文件将是巨大的。比常规自定义格式多大约 17 倍。我典型的 90mb 现在是 1.75Gb
  2. 复制备份文件到postgres容器 docker cp ~/path/to/dump/in-host-system/2020-07-08-1.dump <name_of_postgres_container>:/backups
  3. 转到您的 postgres 容器的 bash docker exec -it <name_of_postgres_container> bash
  4. 在 postgres 容器的 bash 内:psql -U username -d dbname < backups/2020-07-08-1.dump

那行得通