Миграция из Postgres в SQL Server 2008

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

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

3 ответов


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

вот самый полезный поток, который я нашел по этой теме:


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

затем вы должны сделать DSN и предоставить ConnectionString. После ConnectionString работал для мне

драйвер={PostgreSQL с} значение;Server=localhost;для порта=5432;базы данных=TestMasterMap;Уид=Постгреса;Фрд=;

сделать ДСН вы должны пойти в административных Toolsà источники данных (ODBC) и создать пользовательский DSN. После этого можно указать имя DSN в текстовом поле DSN мастера импорта и экспорта SQL Server.


один комментатор утверждал, что это сработало, но он получил " из памяти при чтении кортежей" ошибки на больших таблицах. Поэтому для таблиц с более чем 3 миллионами строк ему пришлось разбить импорт на 3 миллиона блоков строк.

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

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

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

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


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

информация о столбце для данных источника и назначения не может быть восстановленный.

"выставление счетов" - > [dbo].[Биллинг]:

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

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

C:\Program файлы\Microsoft SQL Сервер\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 успешно запущен.


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

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