PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak przenieść bazę danych PostgreSQL do bazy SQLServer?

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 do SEQUENCE używając DEFAULT . W SQL Server jest to IDENTITY 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 ma CREATE 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 prostu VARCHAR bez maksymalnej długości. W SQL Server, TEXT jest... skomplikowane (i przestarzałe). Każde pole w oryginalnym schemacie zadeklarowane jako TEXT 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje coś takiego jak funkcja zip() w PostgreSQL, która łączy dwie tablice?

  2. Utwórz kopię zapasową PostgreSQL za pomocą pg_dump i pg_dumpall

  3. Read Committed jest koniecznością w przypadku rozproszonych baz danych SQL zgodnych z Postgres

  4. Jak make_timestamp() działa w PostgreSQL

  5. Jak działa pg_sleep_until() w PostgreSQL