Postgresql 如何将docker postgres image 10.3中的pg_还原升级到10.5
我使用tableplus作为我的一般管理员 目前正在使用docker postgres映像10.3进行生产和本地主机开发 因为tableplus将他们的postgres 10驱动程序升级到了10.5,所以我不能再使用pg_restore来恢复使用10.5Postgresql 如何将docker postgres image 10.3中的pg_还原升级到10.5,postgresql,docker,pg-restore,table-plus,Postgresql,Docker,Pg Restore,Table Plus,我使用tableplus作为我的一般管理员 目前正在使用docker postgres映像10.3进行生产和本地主机开发 因为tableplus将他们的postgres 10驱动程序升级到了10.5,所以我不能再使用pg_restore来恢复使用10.5--format=custom转储的备份文件 有关如何使用tableplus进行备份的信息,请参见图。以及如何使用10.5驱动程序 我收到的错误消息是pg_restore:[archiver]文件头中不支持的版本(1.14) 我试过的 我试图在
--format=custom
转储的备份文件
有关如何使用tableplus进行备份的信息,请参见图。以及如何使用10.5驱动程序
我收到的错误消息是pg_restore:[archiver]文件头中不支持的版本(1.14)
我试过的
我试图在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
到
我的开发主机系统是macOS
我的开发docker postgres中有许多现有的数据库和模式。因此,如何在不破坏旧数据的情况下安全升级,我目前感到困惑
你能提出建议吗
此外,我认为一个长期的目标是找出如何在docker之外(即在我的主机系统内)拥有数据文件,以便每次我想升级我的postgres docker映像时,我都可以安全地做到这一点,而不必担心
我也想问一下如何切换到这样的设置。如果我理解正确,您希望将10.5中的自定义格式转储恢复到10.3数据库中 如果存档格式在10.3和10.5之间更改,则不可能实现此功能 作为一种解决方法,您可以使用没有“存档版本”的“普通格式”转储(选项
--format=plain
)。但恢复过程中的任何问题都由您来处理,因为不支持降级PostgreSQL
开发和生产应始终使用相同的版本,并且应始终使用最新的次要版本(当前为10.13)。其他一切都在自找麻烦
docker cp~/path/to/dump/in host system/2020-07-08-1.dump:/backups
docker exec-it bash
psql-U username-d dbname
那会有用的是不是输入错误:“使用10.5转储的备份文件”?您是说“10.3”吗?对于基于主机的数据文件,您可以在容器中使用自定义pg_数据文件夹,并将其读写绑定装载到主机文件夹。请记住,如果您有许多IO任务,Docker文件IO并没有那么好。您还可以有一个计划的pg_dumpall命令,只需定期在外部对其进行docker cp即可。@LaurenzAlbe我的意思是10.5。我使用tableplus备份文件,tableplus本身使用10.5驱动程序。查看更新后的问题,请参阅image@VikingPingvin哦嗯,那好的做法是什么呢?更好的做法是将数据文件保存在docker中?在生产中,我们只使用简单的命名卷在postgres容器中存储数据。它位于具有每日备份的VM中。我会把数据文件放在里面,并定期备份以防万一。将它们保存在卷(或绑定装载)中意味着即使pg容器出现故障,它也可以轻松重启,卷也会在那里。请不要意外删除卷。对不起,什么是“没有“存档版本”的纯格式转储?”?只需省略
--format=custom
。你可以用psql来恢复它。哦,天哪,它真的起作用了。哈哈哈。我会用更多的笔记更新你的答案,并将其标记为correct@VikingPingvin自定义格式要好得多。1) 数据被压缩2)您可以有选择地提取转储文件的一部分3)您可以使用-j
选项并行恢复转储文件。@b删除您可能是对的。也许OP根本没有试图降级。
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