Как я могу синхронизировать представление SQL Server с таблицей Postgres?

#sql-server #postgresql #synchronization #etl #database-migration

#sql-server #postgresql #синхронизация #etl #база данных-миграция

Вопрос:

Мне нужно синхронизировать данные из нескольких таблиц в устаревшей базе данных SQL Server (исходной) с одной таблицей в базе данных Postgres (целевой). Схема исходной базы данных абсурдна, поэтому выполнение запроса для выбора данных занимает очень много времени. Я планирую создать индексированное представление в исходной базе данных, а затем каким-то образом синхронизировать это индексированное представление с таблицей Postgres.

Прямо сейчас у меня просто есть запланированная задача, которая удаляет таблицу Postgres (целевую), а затем воссоздает ее с нуля, выполняя сложный запрос в исходной БД. Это было быстро настроить, и это гарантирует, что изменения в исходной базе данных всегда в конечном итоге попадают в целевую базу данных, но воссоздание таблицы каждые несколько часов (по понятным причинам) очень медленное и дорогостоящее. Мне нужен способ реплицировать текущие изменения (только новые / обновленные данные) из исходного представления в целевую таблицу. Есть ли (относительно) простой способ сделать это?

Я немного знаком с CDC, но я понимаю, что CDC нельзя использовать в представлении, поэтому я не верю, что это вариант. Добавление временных меток «обновлено в» в исходные таблицы не является вариантом, поэтому я не могу использовать этот подход. Я мог бы добавить столбец хэша в исходные таблицы или, возможно, добавить столбец хэша в представление, так что это вариант, если это сработает. Существует ли существующий инструмент / сервис, который делает то, что мне нужно?

Ответ №1:

Если вы хотите просмотреть данные базы данных SQL Server в PostgreSQL, вы также можете использовать tds_fdw. https://github.com/tds-fdw/tds_fdw

Кроме того, существуют некоторые сторонние инструменты, которые могут помочь вам в достижении вашей цели, например, SymmetricDS http://www.symmetricds.org/about/overview