Если FDW не сработает для вас, возможно, сравнение хешей - хорошая идея. MD5, вероятно, хорошая идея, только потому, что вы должны получать согласованные результаты из разных программ.
Очевидно, что столбцы должны быть в одном и том же порядке в двух базах данных длясравнение хэша с работой. Если макеты отличаются, вы можете создать представление в Postgres, чтобы оно соответствовало порядку столбцов в SQL Server.
После того, как вы сравните таблицы / представления, появится ярлык для хеширования на стороне Postgres. Представьте себе таблицу с именем facility
:
SELECT MD5(facility::text) FROM facility;
Если это не очевидно, вот что там происходит. Postgres имеет возможность любой составной тип к тексту. Как:
select your_table_here::text from your_table_here
Результат похож на этот пример:
(2be4026d-be29-aa4a-a536-de1d7124d92d,2200d1da-73e7-419c-9e4c-efe020834e6f,"Powder Blue",Central,f)
Обратите внимание на (parens) вокруг результата. Это необходимо учитывать при создании хэша на стороне SQL Server. Этот содержательный фрагмент кода лишает паренов:
SELECT MD5(substring(facility::text, 2, length(facility::text))) FROM facility;
В качестве альтернативы, вы можете объединить столбцы в виде строк вручную и хэшировать их. Скорее всего, вам нужно будет сделать это или использовать представление, если у вас есть поля ID или метки времени, которые автоматически изменялись во время импорта.
Оператор приведения ::
также может привести строку кдругой тип, если у вас есть преобразование на месте. И там, где я перечислил таблицу выше, вы также можете использовать представление.
На стороне SQL Server я понятия не имею. HASHBYTES