Powinieneś być w stanie znaleźć przydatne informacje w zaakceptowanej odpowiedzi na tej stronie Serverfault:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005.
Jeśli możesz przekonwertować schemat bez danych, możesz skrócić kroki dla danych za pomocą tego polecenia:
pg_dump --data-only --column-inserts your_db_name > data_load_script.sql
To ładowanie będzie dość powolne, ale --column-inserts
opcja generuje najbardziej ogólne instrukcje INSERT możliwe dla każdego wiersza danych i powinny być kompatybilne.
EDYCJA:Sugestie dotyczące konwersji schematu są następujące:
Zacząłbym od zrzucenia schematu, ale usunięcia wszystkiego, co ma związek z własnością lub uprawnieniami. To powinno wystarczyć:
pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql
Edytuj ten plik, aby dodać wiersz BEGIN TRANSACTION;
na początek i ROLLBACK TRANSACTION;
do końca. Teraz możesz go załadować i uruchomić w oknie zapytania w SQL Server. Jeśli pojawią się jakieś błędy, upewnij się, że przeszedłeś na sam dół pliku, podświetl instrukcję ROLLBACK i uruchom ją (naciskając F5, gdy instrukcja jest podświetlona).
Zasadniczo musisz rozwiązać każdy błąd, dopóki skrypt nie będzie działał czysto. Następnie możesz zmienić ROLLBACK TRANSACTION
do COMMIT TRANSACTION
i uruchom ostatni raz.
Niestety nie mogę pomóc z błędami, które możesz zobaczyć, ponieważ nigdy nie przechodziłem z PostgreSQL na SQL Server, tylko na odwrót. Niektóre rzeczy, które spodziewam się, że będą problemem (oczywiście NIE jest to wyczerpująca lista):
- PostgreSQL automatycznie zwiększa pola, łącząc
NOT NULL INTEGER
pole doSEQUENCE
używającDEFAULT
. W SQL Server jest toIDENTITY
kolumna, ale nie są dokładnie tym samym. Nie jestem pewien, czy są one równoważne, ale jeśli oryginalny schemat jest pełen pól „id”, możesz mieć kłopoty. Nie wiem, czy SQL Server maCREATE SEQUENCE
, więc być może będziesz musiał je usunąć. - Funkcje bazy danych / procedury składowane nie są tłumaczone między platformami RDBMS. Musisz usunąć każdą
CREATE FUNCTION
instrukcji i ręcznie przetłumacz algorytmy. - Zachowaj ostrożność przy kodowaniu pliku danych. Jestem osobą z Linuksem, więc nie mam pojęcia, jak zweryfikować kodowanie w systemie Windows, ale musisz upewnić się, że to, czego oczekuje SQL Server, jest takie samo, jak plik, który importujesz z PostgreSQL.
pg_dump
ma opcję--encoding=
które pozwolą Ci ustawić określone kodowanie. Przypominam sobie, że Windows ma tendencję do używania dwubajtowego kodowania UTF-16 dla Unicode, podczas gdy PostgreSQL używa UTF-8. Miałem pewien problem z przejściem z SQL Server do PostgreSQL z powodu wyjścia UTF-16, więc warto byłoby to zbadać. - Typ danych PostgreSQL
TEXT
to po prostuVARCHAR
bez maksymalnej długości. W SQL Server,TEXT
jest... skomplikowane (i przestarzałe). Każde pole w oryginalnym schemacie zadeklarowane jakoTEXT
będą musiały zostać sprawdzone pod kątem odpowiedniego typu danych SQL Server. - SQL Server ma dodatkowe typy danych dla
UNICODE
dane. Nie znam go na tyle, żeby coś zasugerować. Wskazuję tylko, że może to być problem.