2010-09-14 6 views
9

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

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

+0

Выберете собственный клиент SQL Server из раскрывающегося списка DataSources. Я предполагаю, что Postgres нуждается в поставщике odbc, но я не знаю, как его реализовать. – reach4thelasers

+0

Как вы подключаетесь к Postgres в настоящее время? У вас еще нет источника данных ODBC для настройки postgres? Да, тебе это нужно. – JohnB

+0

Вопрос 1: Почему бы кому-нибудь это хотеть? Это не только экономическое самоубийство, но и техническое самоубийство. –

ответ

9

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

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


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

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

Driver = {PostgreSQL}; Server = localhost; Port = 5432; Database = TestMasterMap; Uid = postgres; Pwd =;

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


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

Кроме того, в этой теме есть link to the native .NET provider for PostgreSQL.

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

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

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

+0

Я просто попытался импортировать таблицы в CSV-файлы в SQL Server 2005 и заметил, что импорт CSV затруднен. Я просто не мог заставить его работать из-за различных проблем. PostgreSQL импортировал те же файлы без каких-либо проблем. – juzzlin

+0

Мне нравится идея экспортировать данные в CSV. Работа с SSIS напрямую не помогла мне, особенно потому, что данные, которые я хотел экспортировать, были организованы в представлениях, которые, как представляется, не видят драйвер odbc (или сам SSIS). – Andre

1

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

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

1

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

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

«Биллинг» -> [DBO] [Billing].

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

Я нашел решение в блоге Microsoft here. По-видимому, проблема в том, что различные драйверы 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 успешно выполнялся.

+0

Спасибо за понимание! Я никогда не заставлял его работать! – reach4thelasers

Смежные вопросы