Как AWS postgres RDS выполняет репликацию схемы репликации чтения? - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу знать, как AWS postgres RDS выполняет репликацию, когда я переименовываю схемы, чтобы «поменять» их в экземпляре чтения / записи базы данных.

Копирует ли это действие в реплики чтенияотправив команды переименования "alter schema", которые я дал моему экземпляру для чтения / записи? Или после моих переименований, он видит совершенно разные наборы данных в схемах и делает новую копию каждого из них для реплик чтения?


Например ...

В моем экземпляре 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;

... Я аффективно поменял их местами.

Я ожидаю, что эти действия будут реплицированы через WAL postgres (то есть: он отправляет команды переименования в реплики), и репликация AWS RDS не будет пытаться тратить время на копирование огромных объемов данных повсюду.

Это правильно?

1 Ответ

0 голосов
/ 07 ноября 2019

(Говоря о PostgreSQL здесь, но RDS, вероятно, аналогичен.)

Переименование схемы (или любого другого объекта) - это небольшое обновление в таблице каталога, и никакие данные не перемещаются. Внутренне PostgreSQL использует только числовой идентификатор объекта, который остается прежним.

Вы можете заключить три оператора в транзакцию, чтобы сделать всю магию атомарной.

То же самое верно и в режиме ожидания,это тривиальная (мета) модификация данных.

Единственное, что может быть проблемой, - это одновременные сеансы, удерживающие блокировки.

...