Репликация данных между БД Postgres - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть Postgres DB, которая используется приложением чата. Система чата часто усекает эти таблицы, когда они становятся большими, но мне нужно, чтобы эти данные были скопированы в другую базу данных Postgres. Я не буду усекать таблицы в этой БД.

Как настроить несколько таблиц в базе данных системы чата для репликации данных в другую базу данных Postgres. Есть ли быстрый способ сделать это?

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011
  • Slony может реплицировать только выбранные таблицы, но я не уверен, как он обрабатывает усечения, и его настройка может быть затруднена.
  • Вы также можете использовать что-то вроде pgpool для отправки копий операторов вставки во вторую базу данных.
  • Вы можете изменить источник приложения чата, чтобы он делал две записи (по одной на каждую базу данных) при создании новой записи.
  • Вы можете просто написать скрипт на Perl / PHP / Python для чтения из одного и записи в другой, а затем запустить его с помощью cron, чтобы убедиться, что он запускается до усечения.
1 голос
/ 29 ноября 2011

Если вы копируете только пакет строк через день, вам может быть лучше использовать простой INSERT в другой схеме в той же базе данных или в другой базе данных в том же кластере базы данных (вам нужно что-то вроде dblink для этого).

Самым безопасным / быстрым решением в той же базе данных будет записываемый CTE (новое в Postgres 9.1).Что-то вроде этого:

WITH x AS (
    DELETE FROM tbl
    WHERE <some condition>
    RETURNING *
    )
INSERT INTO backup.tbl
SELECT *
FROM x;

Для реальной репликации я бы начал с этой превосходной статьи на Вики Postgres о репликации, кластеризации и пуле.

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