Трябва да можете да намерите полезна информация в приетия отговор на тази страница с грешки в сървъра:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005 г.
Ако можете да конвертирате схемата без данните, може да сте в състояние да съкратите стъпките за данните, като използвате тази команда:
pg_dump --data-only --column-inserts your_db_name > data_load_script.sql
Това натоварване ще бъде доста бавно, но --column-inserts
опцията генерира възможно най-общите изрази INSERT за всеки ред данни и трябва да е съвместима.
РЕДАКТИРАНЕ:Предложенията за конвертиране на схемата са следните:
Бих започнал с изхвърляне на схемата, но премахване на всичко, което има отношение към собствеността или разрешенията. Това трябва да е достатъчно:
pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql
Редактирайте този файл, за да добавите реда BEGIN TRANSACTION;
до началото и ROLLBACK TRANSACTION;
до края. Сега можете да го заредите и стартирате в прозорец за заявка в SQL Server. Ако получите някакви грешки, уверете се, че отивате в края на файла, маркирайте оператора ROLLBACK и го стартирайте (като натиснете F5, докато операторът е маркиран).
По принцип трябва да разрешите всяка грешка, докато скриптът се изпълни чисто. След това можете да промените ROLLBACK TRANSACTION
до COMMIT TRANSACTION
и стартирайте за последен път.
За съжаление не мога да помогна с кои грешки може да видите, тъй като никога не съм минавал от PostgreSQL към SQL Server, само обратното. Някои неща, които бих очаквал да бъдат проблем, обаче (очевидно НЕ е изчерпателен списък):
- PostgreSQL прави автоматично увеличение на полетата чрез свързване на
NOT NULL INTEGER
поле къмSEQUENCE
използвайкиDEFAULT
. В SQL Server това еIDENTITY
колона, но те не са точно едно и също нещо. Не съм сигурен дали са еквивалентни, но ако оригиналната ви схема е пълна с полета "id", може да имате проблеми. Не знам дали SQL Server имаCREATE SEQUENCE
, така че може да се наложи да ги премахнете. - Функциите на базата данни / Съхранените процедури не се превеждат между RDBMS платформи. Ще трябва да премахнете всяка
CREATE FUNCTION
изрази и ръчно преведете алгоритмите. - Внимавайте с кодирането на файла с данни. Аз съм човек на Linux, така че нямам представа как да проверя кодирането в Windows, но трябва да се уверите, че това, което SQL Server очаква, е същото като файла, който импортирате от PostgreSQL.
pg_dump
има опция--encoding=
което ще ви позволи да зададете конкретно кодиране. Изглежда си спомням, че Windows има тенденция да използва двубайтово UTF-16 кодиране за Unicode, където PostgreSQL използва UTF-8. Имах проблем с преминаването от SQL Server към PostgreSQL поради изхода на UTF-16, така че би си струвало да проуча. - Типът данни на PostgreSQL
TEXT
е простоVARCHAR
без максимална дължина. В SQL Server,TEXT
е... сложен (и отхвърлен). Всяко поле в оригиналната ви схема, което е декларирано катоTEXT
ще трябва да бъде прегледан за подходящ тип данни на SQL Server. - SQL Server има допълнителни типове данни за
UNICODE
данни. Не съм достатъчно запознат с него, за да правя предложения. Просто посочвам, че може да е проблем.