繁体   English   中英

如何将 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 中将 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 之外(即在我的主机系统内)拥有数据文件,以便每次我想升级我的 docker 映像以用于 postgres,我可以安全地这样做而不必担心。

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

如果我理解正确,您希望将使用 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. go to the bash of your postgres container docker exec -it <name_of_postgres_container> bash
  4. 在 postgres 容器的 bash 内: psql -U username -d dbname < backups/2020-07-08-1.dump

那可行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM