У меня есть база данных в 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 не удалось. Тем не менее, я использовал коммерческий инструмент для схемы. Итак, мой процесс преобразования был следующим:
На этапе преобразования были учтены некоторые различия в форматах, используемых pg_dump и bcp, например:
Я также обнаружил, что некоторые уникальные ограничения, которые были нормальными в Postgres, были нарушены в MSSQL, поэтому мне пришлось отказаться от них. Это произошло потому, что NULL = NULL в MSSQL (т.е. NULL рассматривается как уникальное значение), но не в Postgres.
Ну вот :) К сожалению, дороговато.
Прошло почти 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 долларов. Пока это стоило вложений.