Перенести данные из MS SQL в PostgreSQL?

Я огляделся и не мог найти ничего, что могло бы ответить на этот конкретный вопрос.

Каков самый простой способ переноса данных из базы данных MS SQL Server 2005 в установку Postgres (8.x)?

Я рассмотрел несколько утилит, таких как "Full Convert Enterprise" и т.д., и все они не работают по той или иной причине, начиная от странных ошибок, которые заставляют его взорвать до вставки нулей, а не фактических данных (wth?).

Я смотрю на БД со всей таблицей, за исключением одного представления, без хранимых процедур, функций и т.д.

В этот момент я собираюсь написать небольшую утилиту, чтобы сделать это для меня, я просто не могу поверить, что это необходимо. Неужели есть что-то, что может это сделать? Я даже не слишком беспокоюсь о стоимости, хотя свободен предпочтительнее:)

Ответы

Ответ 2

Вы можете использовать функциональность MS DTS (переименованную в SSIS в последней версии, я думаю). Одна из проблем с DTS заключается в том, что я не смог заставить ее совершить фиксацию после каждой строки при загрузке данных в pg. Это нормально, если у вас есть только пара из 100 тыс. Строк или около того, но это очень медленно.

Обычно я пишу небольшой script, который выгружает данные из SQLServer в формате CSV, а затем использует COPY WITH CSV на стороне PostgreSQL.

Тем не менее, оба они заботятся только о данных. Уход за схемой немного сложнее, так как типы данных не обязательно отображаются прямо. Но его можно легко создать вместе со статической нагрузкой схемы. Если схема проста (например, varchar/int datatypes), эта часть также может быть легко списана с данными в INFORMATION_SCHEMA.

Ответ 3

Я не знаю, почему никто не упомянул простейший и простой способ использования надежной MS SQL Server Management Studio.

Просто вам просто нужно использовать встроенную функцию импорта/экспорта SSIS. Вы можете выполнить следующие действия:

  1. Во-первых, вам необходимо установить драйвер ODBC PostgreSQL для Windows. Очень важно установить правильную версию с точки зрения архитектуры процессора (x86/x64).

  2. Внутри Management Studio, щелкните правой кнопкой мыши по базе данных: Задачи → Экспорт данных

  3. В качестве источника данных выберите собственный клиент SQL Server.

  4. Выберите поставщика данных.Net Framework для ODBC в качестве драйвера назначения.

  5. Установите строку подключения в свою базу данных в следующей форме:

    Driver = {PostgreSQL ODBC Driver (UNICODE)}; Server =; Port =; Database =; UID =; PWD =

  6. На следующей странице вам просто нужно выбрать таблицы, которые вы хотите экспортировать. SQL Server будет генерировать сопоставление по умолчанию, и вы можете его редактировать. Вероятно, вы столкнетесь с некоторыми проблемами несоответствия типа, которые требуют определенного времени. Например, если в SQL Server имеется логический столбец, вы должны экспортировать его как int4.

В Microsoft Docs представлено подробное описание подключения к PostgreSQL через ODBC.

PS: если вы хотите увидеть установленный вами драйвер ODBC, вам необходимо проверить его через ODBC Data Source Administrator.

Ответ 4

Ну, есть привязки .NET для MS SQL Server 2005 (очевидно), а также для PostgreSQL. Поэтому для кодирования программы, которая могла бы безопасно переносить данные из одного в другой, потребовалось бы всего несколько строк кода. Представление, вероятно, должно быть выполнено вручную, поскольку Postgres не использует тот же язык для представлений, что и SQL Server.