如何将 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)。其他都是自找麻烦
- 像这样备份为纯文本:警告!该文件将是巨大的。比常规自定义格式多大约 17 倍。我典型的 90mb 现在是 1.75Gb
- 复制备份文件到postgres容器
docker cp ~/path/to/dump/in-host-system/2020-07-08-1.dump <name_of_postgres_container>:/backups
- 转到您的 postgres 容器的 bash
docker exec -it <name_of_postgres_container> bash
- 在 postgres 容器的 bash 内:
psql -U username -d dbname < backups/2020-07-08-1.dump
那行得通
我使用 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)。其他都是自找麻烦
- 像这样备份为纯文本:警告!该文件将是巨大的。比常规自定义格式多大约 17 倍。我典型的 90mb 现在是 1.75Gb
- 复制备份文件到postgres容器
docker cp ~/path/to/dump/in-host-system/2020-07-08-1.dump <name_of_postgres_container>:/backups
- 转到您的 postgres 容器的 bash
docker exec -it <name_of_postgres_container> bash
- 在 postgres 容器的 bash 内:
psql -U username -d dbname < backups/2020-07-08-1.dump
那行得通