我期待设置一个时间表,以便我的临时数据库始终是我的生产数据库的副本,并且每天一次或每小时一次地进行复制。如何安排从生产到暂存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;
这样做的最佳方式是什么?