Миграция с Postgres на SQL Server 2008 - PullRequest
11 голосов
/ 14 сентября 2010

Мне нужно перенести базу данных из Postgres 7 в SQL Server 2008. Я знаком с мастером импорта и экспорта служб SSIS, но я озадачен тем, как определить источник данных или определить поставщика данных.

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

Ответы [ 3 ]

10 голосов
/ 14 сентября 2010

Я желаю вам удачи при попытке импортировать данные из PostgreSQL в SQL Server с помощью мастера импорта и экспорта SQL Server. Тем не менее, я прочитал множество тем на форумах, где люди сталкиваются с проблемами при работе. Например:

Вот самая полезная тема, которую я нашел по теме:


Чтобы помочь кому-то, кто может пытаться достичь цели, аналогичной моей. Вместо выбора «Поставщик OLE DB PostgreSQL» в раскрывающемся меню источника данных мастера импорта и экспорта SQL Server выберите «Поставщик данных .Net Framework для Odbc»

Затем вы должны создать DSN и предоставить ConnectionString. У меня работает следующая ConnectionString

Driver = {PostgreSQL}; Server = локальный; порт = 5432; Database = TestMasterMap; UID = Postgres; PWD =;

Чтобы создать DSN, вам нужно зайти в Администрирование и Источники данных (ODBC) и создать DSN пользователя. После этого вы можете указать имя DSN в текстовом поле DSN мастера импорта и экспорта SQL Server.


Один комментатор утверждал, что это сработало, но он получил ошибки «Недостаточно памяти при чтении кортежей» на больших таблицах. Таким образом, для таблиц с более чем 3 миллионами строк ему пришлось разбить импорт на 3 миллиона фрагментов строк.

Кроме того, в этом потоке есть ссылка на собственный поставщик .NET для PostgreSQL .

Лично, если это то, что мне нужно было сделать только один раз, и если я достаточно хорошо понял схему и данные, я бы попробовал:

  1. экспорт данных из PostgreSQL в виде плоских файлов
  2. создать схему в SQL Server (без PK или ограничений)
  3. используйте мастер импорта / экспорта служб SSIS для импорта плоских файлов
  4. затем создайте PK и необходимые ограничения

Это может занять меньше времени, чем возиться с мастером импорта / экспорта SSIS и PostgreSQL в течение нескольких дней (но было бы хорошо, если бы эти инструменты работали!)

5 голосов
/ 18 ноября 2016

У меня были проблемы с использованием мастера импорта в SQL Server 2008 R2 для импорта таблиц из PostgreSQL. У меня был установлен драйвер PostgreSQL ODBC, поэтому для источника данных в мастере импорта я выбрал «Поставщик данных .Net Framework для Odbc» и предоставил имя DSN для своей базы данных PostgreSQL. Мастер нашел таблицы в порядке, но когда я пошел на импорт, я получил ошибку

Не удалось получить информацию столбца для данных источника и назначения.

«Billing» -> [dbo]. [Billing]:

- Не удается найти столбец -1.

Я нашел решение в сообщении в блоге Microsoft здесь . Очевидно, проблема в том, что различные драйверы ODBC используют разные имена атрибутов при сообщении метаданных столбца. Чтобы начать импорт, мне пришлось отредактировать файл «ProviderDescriptors.xml», который находился по адресу

C: \ Program Files \ Microsoft SQL Server \ 100 \ DTS \ ProviderDescriptors \ ProviderDescriptors.xml

В ...

<dtm:ProviderDescriptor SourceType="System.Data.Odbc.OdbcConnection">

... элемент Мне пришлось изменить атрибуты с ...

<dtm:ColumnSchemaAttributes
    NameColumnName = "COLUMN_NAME"
    OrdinalPositionColumnName="ORDINAL_POSITION"
    DataTypeColumnName = "TYPE_NAME"
    MaximumLengthColumnName = "COLUMN_SIZE"
    NumericPrecisionColumnName = "COLUMN_SIZE"
    NumericScaleColumnName = "DECIMAL_DIGITS"
    NullableColumnName="NULLABLE"
    NumberOfColumnRestrictions="4"
/>

... до ...

<dtm:ColumnSchemaAttributes
    NameColumnName = "COLUMN_NAME"
    OrdinalPositionColumnName="ORDINAL_POSITION"
    DataTypeColumnName = "TYPE_NAME"
    MaximumLengthColumnName = "LENGTH"
    NumericPrecisionColumnName = "PRECISION"
    NumericScaleColumnName = "SCALE"
    NullableColumnName="NULLABLE"
    NumberOfColumnRestrictions="4"
/>

То есть мне пришлось настроить значения атрибутов MaximumLengthColumnName, NumericPrecisionColumnName и NumericScaleColumnName на "LENGTH", "PRECISION" и "SCALE" соответственно.

После того, как это изменение было сделано, импорт из PostgreSQL в SQL Server был успешно выполнен.

1 голос
/ 21 сентября 2016

Когда я закончил комментировать ответ выше, я подумал о попытке SQL WorkbenchJ ;у него есть функция datapump, которая мне очень понравилась.Мне удалось экспортировать данные из моей базы данных PostgreSQL в экземпляр сервера SQL.

Те, кто хотел бы запустить это в пакетном режиме (через оболочку), вот как это сделать: Поток групп Google .Команда WbCopy, упомянутая в обсуждении, на самом деле нигде не документирована, но вы можете сгенерировать ее через интерфейс datapump и затем изменить все, что вам нужно.

...