Назад | Перейти на главную страницу

Лучший инструмент для переноса базы данных PostgreSQL на MS SQL 2005?

У меня есть база данных в PostgreSQL 8.3.1, которую я хотел бы перенести на MS SQL Server 2005 (или, возможно, 2008), включая схему таблицы и данные. Размер базы данных составляет около 50 ГБ и около 400000000 строк, поэтому я думаю, что о простых операторах INSERT не может быть и речи. Может ли кто-нибудь порекомендовать лучший инструмент для выполнения этой миграции? Очевидно, он должен быть надежным, поэтому данные в целевой БД точно такие же, как и в исходной, и необходимо иметь возможность скопировать этот объем данных в разумные сроки.

Если у вас есть соответствующие драйверы поддержки Postgres, установленные на вашем сервере SQL 2005 (или вы хотите использовать Postgres через ODBC, или хотите выгрузить данные из Postgres в файл и импортировать из него), вы можете использовать мастер импорта / экспорта в SQL Server в чтобы скопировать данные. Это задаст вам множество вопросов, а затем выполнит импорт как задание пакета служб интеграции SQL Server (SSIS), используя соответствующие операции пакетной вставки.

Однако, если этот мастер недоступен, стоит учесть, что, хотя у вас большое количество строк, индивидуальный размер строк в среднем составляет <135 байт, и при наличии достаточного места в журнале транзакций для выполнения транзакции 50 ГБ » простые инструкции insert 'сами по себе не исключены.

В итоге я не использовал никаких сторонних инструментов для обработки данных, поскольку ни один из тех, что я пробовал, не работал с большими таблицами. Даже SSIS не удалось. Тем не менее, я использовал коммерческий инструмент для схемы. Итак, мой процесс преобразования был следующим:

  1. Полное преобразование предприятия для копирования схемы (нет данных).
  2. pg_dump для экспорта данных из Postgres в формате «обычного текста», который по сути представляет собой файл значений, разделенных табуляцией (TSV).
  3. Скрипты Python для преобразования экспортируемых файлов в формат, понятный bcp.
  4. bcp для импорта данных в MSSQL.

На этапе преобразования были учтены некоторые различия в форматах, используемых pg_dump и bcp, например:

  • pg_dump помещает некоторые специфические для Postgres данные в начало файла и заканчивает данные знаком ".", в то время как bcp ожидает, что весь файл будет содержать данные
  • pg_dump сохраняет значения NULL как "\ N", в то время как bcp ничего не ожидает вместо NULL (т. е. никаких данных между разделителями столбцов)
  • pg_dump кодирует табуляцию как "\ t" и новую строку как "\ n", а bcp обрабатывает их буквально
  • pg_dump всегда использует табуляцию и новую строку как разделители, а bcp позволяет пользователю указывать разделители. Это становится необходимым, если данные содержат табуляторы или символы новой строки, поскольку они не закодированы.

Я также обнаружил, что некоторые уникальные ограничения, которые были нормальными в Postgres, были нарушены в MSSQL, поэтому мне пришлось отказаться от них. Это произошло потому, что NULL = NULL в MSSQL (т.е. NULL рассматривается как уникальное значение), но не в Postgres.

http://www.easyfrom.net/

Ну вот :) К сожалению, дороговато.

Прошло почти 10 лет, а это все еще не прямая проблема. В итоге я получил гибридное решение, я свернул свой собственный сопоставитель схемы, экспортировав схему и комментарии к таблице / столбцу, используя следующую команду:

pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql

Затем я написал сценарий PHP, переводящий схему на T-SQL. Впоследствии я использовал следующее стороннее программное обеспечение для фактического импорта строк (без принадлежности):

http://www.convert-in.com/pgs2mss.htm

Это было немного медленно, но пока все хорошо. Наша база данных была меньше вашей, всего 15 ГБ, но этот инструмент, похоже, справился с этим хорошо. Это был также самый дешевый, который я смог найти, примерно за 50 долларов. Пока это стоило вложений.