如何在本地 Flask 环境中自动使用生产 postgres 数据库备份

Posted

技术标签:

【中文标题】如何在本地 Flask 环境中自动使用生产 postgres 数据库备份【英文标题】:How to automate using a production postgres database backup in local Flask environment 【发布时间】:2021-05-07 09:13:31 【问题描述】:

我们的网站使用 Postgres 和 Flask,并且我们经常在本地使用生产数据库转储。为了获得新的转储,我使用远程桌面连接 (RDC) 连接到 pgAdmin,然后再次使用 RDC 从服务器复制 .bak 文件并将其保存在本地。同样,我使用 pdAdmin 的本地实例从备份中恢复数据库状态。

我的经理要求我在每次启动本地 Flask 实例时自动执行此过程以使用生产数据库。我该怎么做?

【问题讨论】:

【参考方案1】:

您可以编写一个 shell 脚本,使用 pg_dump 将数据库转储到本地文件,然后使用 pg_restore 从该转储构建一个新的本地数据库。您甚至可以将输出从 pg_dump 传递到 pg_restore... 类似

pg_dump --host <remote-database-host> --dbname <remote-database-name> --username <remote-username> > pg_restore --host <local-database-host> --username <local-username>

要将您的密码输入pg_dump / pg_restore,您可能需要使用 .pgpass 文件,如下所述:How to pass in password to pg_dump?

如果您希望在本地启动 Flask 实例时自动发生这种情况,如果设置了 LOCAL_INSTANCE 环境变量或类似的内容,您可以使用 subprocess 调用从初始化代码中调用 shell 脚本

【讨论】:

谢谢,但我对此还有其他问题。我试图从 sh 导入 pg_dump,但我知道 sh 不支持 window.dump。那么你有没有关于子流程的文件

以上是关于如何在本地 Flask 环境中自动使用生产 postgres 数据库备份的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flask API 将机器学习模型部署到生产环境中

Flask 首次运行:不要在生产环境中使用开发服务器

Python3+Gunicorn+Nginx 部署Flask项目

开发环境和AWS弹性beantalk

插件flask_jwt_extended

Python Flask项目在Gitlab CI中自动打包Docker镜像