Миграция из 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 в этой теме.
лично, если это то, что я должен был сделать только один раз, и если бы я понял схему и данные довольно хорошо, я бы попытался:
- экспортировать данные из PostgreSQL как плоские файлы
- создайте схему в SQL Server (без PKs или ограничений)
- используйте мастер импорта/экспорта служб SSIS для импорта плоских файлов
- затем создайте 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, а затем измените все, что вам нужно.