Postgres передача данных из локальной базы данных в удаленную - PullRequest
0 голосов
/ 12 января 2020

У меня есть серверы (скажем, x.x.x.x - основной и y.y.y.y - вторичный)
На главном сервере у меня запущено приложение Django, которое сохраняет свои данные в Postgres базу данных, вторичную один из них абсолютно пустой.
Каждую минуту он создает около 900+ строк в одной таблице, поэтому, в конце концов, он стал более 3M строк в этой таблице, и обработка всех этих объектов (фильтрация, сортировка) стала очень медленной из-за ее количество. Однако мне нужны только те строки, которые были написаны за последние 3 дня, не более. Тем не менее, я не могу просто удалить данные, потому что они нужны мне для анализа в будущем, поэтому мне нужно их где-то хранить.
Я думаю о том, чтобы создать другую базу данных на вторичном сервере и сохранить все дополнительные данные там. Поэтому мне нужно перенести все данные старше 3 дней с локального (основного) сервера на удаленный (дополнительный) сервер.
Регулярность может быть достигнута с помощью cron, что является тривиальной задачей.
Что нетривиальна команда, которую мне нужно выполнить в cron. Я не думаю, что для этого есть встроенная команда SQL, поэтому мне интересно, возможно ли это вообще.

Я думаю, что команда должна выглядеть примерно так:

INSERT INTO remote_server:table
SELECT * FROM my_table;

Кроме того, я думаю, стоит упомянуть, что таблица, с которой у меня возникают проблемы, постоянно обновляется, как я уже писал выше. Таким образом, возможно, эти обновления вызывают проблемы со скоростью при выполнении некоторых фильтров или запросов сортировки.

1 Ответ

0 голосов
/ 13 января 2020

У вас есть несколько вариантов:

Если вы хотите придерживаться ручного копирования, вы можете настроить чужой сервер , который подключается от вторичного устройства к основному. Затем создайте чужую таблицу для доступа к таблице с основного сервера. Возможно, доступ через чужую таблицу уже достаточно быстрый, так что вам на самом деле не нужно физически копировать данные. Но если вы хотите иметь «отключенную» копию, вы можете просто запустить insert into local_table select * from foreign_table или создать материализованное представление, которое обновляется через cron.

Другое решение, которое немного проще в настройке (но, вероятно, медленнее) использовать модуль dblink для доступа к удаленному серверу.

И, наконец, у вас есть возможность настроить логическая репликация для этой таблицы с основного сервера на дополнительный. Тогда вам не нужно никакое задание cron, поскольку любые изменения на первичном сервере будут автоматически применены к таблице на вторичном сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...