2016-12-31 49 views
8

我期待设置一个时间表,以便我的临时数据库始终是我的生产数据库的副本,并且每天一次或每小时一次地进行复制。如何安排从生产到暂存Heroku的连续数据库副本?

我知道,有执行一次性拷贝一个简单的方法,使用heroku pg

heroku pg:copy SOURCE_APP::SOURCE_DATABASE DESTINATION_DATABASE --app DESTINATION_DATABASE 

不过这只是一次性的事情。

我也知道使用Heroku调度程序运行计划命令非常简单,Heroku调度程序运行在一次性的dynos中。但是dynos没有安装Heroku Toolbelt,所以heroku pg:copy不可用。

我使用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'; 

不限制的模式,因为我没有正确的权限,我认为失败通过将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; 

这样做的最佳方式是什么?

回答

2

没有理由不能在dyno上下载并安装CLI,作为每个生产数据库副本的先驱。

您只需要一个shell脚本即可从调度程序调用,并让shell脚本安装CLI并根据需要使用环境变量来保存所需的凭据。

简单的两步过程...

  1. 安装CLI
  2. 使用CLI数据库

的执行复制实际上它可以是没有任何网页或工作进程独立的应用程序运行这个。

我们使用类似的方法运行自己的备份并将其上传到AWS S3存储桶,独立于Heroku自己的备份,因此我们同时安装了Heroku和AWS CLI。

相关问题