我在同一台服务器上有两个Postgres数据库,它们具有相同的模式。目标是让DB1作为产品,DB2作为接收从MySQL db迁移过来的所有数据的数据库,然后使用DB2迁移后创建的转储来恢复DB1。换句话说,转储DB2并使用此转储对DB1执行还原。
这将允许生产DB1“始终可用”,即使迁移过程是在DB2上进行的。
我的问题是,是否可以使用DB2转储来恢复DB1?还是应该使用一种不同的策略--比如重命名数据库?谢谢
发布于 2014-05-29 04:52:20
听起来,您正在尝试刷新一个数据库,这是另一个DB的快照,并且这样做不会中断对第一个DB的读取访问。
如果是这样的话,最简单的方法实际上是在快照DB中实时执行。只需开始一个事务,truncate所有表,然后用新数据填充它们,然后提交。并发事务将在提交之前查看旧数据,然后查看新数据。
如果由于某些原因无法做到这一点,则可能希望脱机填充一个DB,然后使用ALTER DATABASE ... RENAME交换它们。这样做需要一段很短的时间,所有连接都被迫脱机,并且当前正在运行的事务被中止,这就是为什么我建议使用上面的第一种方法。
如果您的所有表都位于主DB中的一个模式中,则可以填充模式的一个副本,然后使用ALTER SCHEMA ... RENAME来交换它们。这不需要断开连接。
https://dba.stackexchange.com/questions/66053
复制相似问题