2

我使用 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 中简单地将我的 dockerfile 中的 postgres 标记从 10.3 更改为 10.5,但它没有用

原始 dockerfile

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 映像时,我都可以安全地这样做而不必担心。

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

4

1 回答 1

1

如果我理解正确,您希望将使用 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

那可行

于 2020-07-08T07:09:13.560 回答