2016-12-31 50 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。

相關問題