我正在计划为潜在客户创建一个生产轨道应用程序的沙箱系统。
生产系统不断更新新内容,我希望将其带到沙箱中以使其尽可能真实。但是,我不想通过执行完整的数据库转储/恢复来修改沙箱,因为我想在此系统上保留用户帐户(只需使用新内容进行更新)
我已经检查了几个选项,但我可以使用一些建议......
1- DB转储/恢复
虽然它的工作方式很简单但是配置cron作业并在服务器之间传输整个数据库有点痛苦,即使我可能不需要它。我想我可以直接转储某些表,但这仍然可能传输的数据超过了所需数据。
2-数据库复制
基于每个表设置主从复制。从我所看到的,这可能是我想做的。仅复制新内容表并忽略帐户表。
3-另一种方式?
我不确定......有更好的方法吗?
但等等,还有更多!
沙箱系统并不总是在运行(它只在某些时间内可用)所以我需要的东西如果无法连接就不会太烦人。只是悄然失败,稍后再试。
我对复制很陌生,所以有人建议从哪里开始? Slony-I,Bucardo,rubyrep?
详情
答案 0 :(得分:1)
您应该只进行转储/恢复。主/从设置将不起作用,因为从设备将处于只读状态。有两种方法可以做到这一点:
1)Drop the database via the -c flag,然后通过psql恢复:
pg_dump -c ... | psql some_host dba_user staging_db
2)加载到临时数据库,然后执行ALTER DATABASE ... RENAME TO。
pg_dump ... | psql -c some_host dba_user staging_db_tmp
# In psql while connected to template1 (and no one is connected to prod):
ALTER DATABASE staging_db RENAME TO staging_db_tmp;
ALTER DATABASE staging_db_tmp RENAME TO staging_db;
在任何一种情况下,它们都很容易编写脚本。查看psql的'-1'或'--single-transaction'命令。