Ian*_*lor 10 database postgresql heroku
我正在设置一个计划,以便我的登台数据库始终是我的生产数据库的副本,并且每天或每小时一次复制.
我知道有一种简单的方法来执行一次性复制,使用heroku pg:
heroku pg:copy SOURCE_APP::SOURCE_DATABASE DESTINATION_DATABASE --app DESTINATION_DATABASE
Run Code Online (Sandbox Code Playgroud)
但这只是一次性的事情.
我也知道使用Heroku调度程序运行预定命令很容易,这些命令在一次性dynos中运行.但是dynos上heroku pg:copy没有安装Heroku Toolbelt,因此无法使用.
我尝试过使用pg_dump | pg_restore,但我遇到了两个问题之一:
在不限制架构的情况下,它失败了,因为我认为没有正确的权限:
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 3205; 0 0 COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql
Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
Run Code Online (Sandbox Code Playgroud)
限制pg_dump为仅限于--schema=public,它失败,因为某些扩展依赖于公共模式,并且它们不会被删除.
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 9; 2615 16385 SCHEMA public Storm
pg_restore: [archiver (db)] could not execute query: ERROR: cannot drop schema public because other objects depend on it
DETAIL: extension citext depends on schema public
extension pg_stat_statements depends on schema public
HINT: Use DROP ... CASCADE to drop the dependent objects too.
Command was: DROP SCHEMA IF EXISTS public;
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?
您是否考虑过创建数据库关注者(也称为主/从配置)?https://devcenter.heroku.com/articles/heroku-postgres-follower-databases
这将使用生产中的数据不断更新您的关注者数据库.请注意,如果您直接在关注者数据库上更改了数据,那么这不一定会被覆盖,因此不确定这是否是您需要的可能解决方案.
您没有理由不能在 dyno 上下载并安装 CLI,作为生产数据库每个副本的先驱。
您所需要的只是一个从调度程序调用的 shell 脚本,并让 shell 脚本安装 CLI 并根据需要使用环境变量来保存所需的凭据。
简单的两步过程...
事实上,它可以是一个独立的应用程序,没有任何网络或工作进程来运行它。
我们使用类似的方法来运行我们自己的备份并将其上传到 AWS S3 存储桶,独立于 Heroku 自己的备份,因此我们安装了 Heroku 和 AWS CLI。
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |