Tôi đang tìm cách thiết lập lịch biểu sao cho cơ sở dữ liệu dàn dựng của tôi luôn là bản sao cơ sở dữ liệu sản xuất của tôi và có bản sao xảy ra mỗi ngày một lần hoặc mỗi giờ một lần.Làm thế nào để lên lịch sao chép liên tục của cơ sở dữ liệu từ sản xuất đến dàn dựng trên Heroku?
Tôi biết rằng có một cách dễ dàng để thực hiện một bản sao một lần, sử dụng heroku pg
:
heroku pg:copy SOURCE_APP::SOURCE_DATABASE DESTINATION_DATABASE --app DESTINATION_DATABASE
Nhưng đó chỉ là một điều một lần.
Tôi cũng biết rằng thật dễ dàng để chạy các lệnh được lên lịch với bộ lập lịch Heroku, được chạy trong các dynos một lần. Nhưng các dynos không có Heroku Toolbelt được cài đặt trên chúng, do đó, heroku pg:copy
không có sẵn.
Tôi đã cố gắng sử dụng pg_dump | pg_restore
, nhưng tôi chạy vào một trong hai vấn đề:
Nếu không có hạn chế schema, nó không thành công bởi vì tôi không có đủ quyền hạn tôi nghĩ:
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';
Với việc hạn chế pg_dump
thành chỉ --schema=public
, nó không thành công vì một số tiện ích phụ thuộc vào giản đồ công khai và chúng không bị loại bỏ.
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;
Cách tốt nhất để làm điều này là gì?