AWS postgres RDS读取复制如何处理模式切换?

时间:2019-11-07 12:08:22

标签: postgresql replication amazon-rds

我想知道AWS postgres RDS如何进行复制,在这里我将模式重命名以在数据库的读/写实例中“交换”它们。

是否通过发送我给读/写实例的​​“更改架构”重命名命令将该操作复制到只读副本?还是在我重命名后,它会在模式中看到完全不同的数据集,并将每个数据集的全新副本复制到只读副本吗?


例如...

在我的RDS实例中,我有一个“ my_mega_database”读/写实例,我想为其创建一个只读副本以供我的应用程序连接。

通常,在“ my_mega_database”中有两个模式“ my_data”和“ my_data_old”,其中“ my_data”包含昨晚发送的数据,“ my_data_old”包含前一天晚上的数据。每个表都包含许多表和大量数据。

如果我要执行以下操作...

ALTER SCHEMA my_data_old RENAME TO my_data_tmp;
ALTER SCHEMA my_data RENAME TO my_data_old;
ALTER SCHEMA my_data_tmp RENAME TO my_data;

...我深情地交换了这些内容。

我期望这些操作是通过postgres WAL复制的(即:它将重命名命令发送到副本),并且AWS RDS复制不会浪费时间在整个地方复制大量数据。 / p>

这正确吗?

1 个答案:

答案 0 :(得分:0)

(在这里谈论PostgreSQL,但RDS可能与此类似。)

重命名架构(或任何其他对象)是目录表中的一个小更新,并且不移动任何数据。 PostgreSQL内部仅使用数字对象ID,该数字对象ID保持不变。

您可以将这三个语句包装在一个事务中,以使整个魔术原子化。

备用数据库也是如此,这是微不足道的(元)数据修改。

可能唯一的问题是持有锁的并发会话。