Jak być może wiesz, Microsoft SQL Server jest bardzo popularnym RDBMS z bardzo restrykcyjnymi licencjami i wysokim kosztem posiadania, jeśli baza danych ma znaczny rozmiar lub jest używana przez znaczną liczbę klientów. Zapewnia bardzo przyjazny dla użytkownika interfejs i łatwy do nauczenia. Spowodowało to dużą liczbę zainstalowanych użytkowników.
PostgreSQL to najbardziej zaawansowana na świecie baza danych typu open source. Społeczność PostgreSQL jest bardzo silna i stale ulepsza istniejące funkcje i wdraża nowe. Według rankingu popularności silnika db, PostgreSQL był DBMS roku 2017.
Dlaczego migrować z MS SQL Server do PostgreSQL?
- MS SQL Server to zastrzeżona baza danych firmy Microsoft, podczas gdy PostgreSQL jest rozwijany i utrzymywany przez globalną społeczność programistów open source. Jeśli koszt jest problemem, zdecydowanie powinieneś wybrać PostgreSQL. Tutaj możesz sprawdzić ceny.
- PostgreSQL to wieloplatformowy silnik bazy danych, który jest dostępny dla systemów Windows, Mac, Solaris, FreeBSD i Linux, podczas gdy SQL Server działa tylko w systemie operacyjnym Windows. Jak być może wiesz, PostgreSQL jest oprogramowaniem typu open source i jest całkowicie darmowy, podczas gdy koszt MSSQL Server zależy od liczby użytkowników i rozmiaru bazy danych.
- Elastyczne licencjonowanie open source i łatwa dostępność od dostawców chmury publicznej, takich jak AWS, chmura Google itp.
- Skorzystaj z dodatków typu open source, aby poprawić wydajność.
Co powinieneś wiedzieć
Chociaż zarówno baza danych Microsoft SQL Server, jak i baza danych PostgreSQL są zgodne z ANSI-SQL, nadal istnieją różnice między ich składnią SQL, typami danych, rozróżnianiem wielkości liter, co sprawia, że przesyłanie danych nie jest takie proste.
Przed migracją zapoznaj się z różnicami między MSSQL i PostgreSQL. W obu bazach danych jest wiele funkcji, więc powinieneś znać zachowanie tych właściwości/funkcji w MSSQL i PostgreSQL. Sprawdź kilka ważnych różnic, które powinieneś znać przed migracją.
Mapowanie typu danych
Niektóre typy danych MSSQL nie pasują bezpośrednio do typów danych PostgreSQL, więc musisz zmienić je na odpowiedni typ danych PostgreSQL.
Sprawdź poniższą tabelę.
Microsoft SQL Server | PostgreSQL | |
---|---|---|
WIELKIE | 64-bitowa liczba całkowita | WIELKIE |
BINARNY(n) | Łańcuch bajtów o stałej długości | BYTEA |
BIT | 1, 0 lub NULL | BOOLEAN |
ZNAK(n) | Ciąg znaków o stałej długości, 1 <=n <=8000 | ZNAK(n) |
VARCHAR(n) | Ciąg znaków o zmiennej długości, 1 <=n <=8000 | VARCHAR(n) |
VARCHAR(maks.) | Ciąg znaków o zmiennej długości, <=2 GB | TEKST |
SŁOWNICA(n) | Ciąg bajtów o zmiennej długości, 1 <=n <=8000 | BYTEA |
SKŁADNIA(maks.) | Ciąg bajtów o zmiennej długości , <=2 GB | BYTEA |
NVARCHAR(n) | Ciąg Unicode UCS-2 o zmiennej długości | VARCHAR(n) |
NVARCHAR(maks.) | Dane Unicode UCS-2 o zmiennej długości, <=2 GB | TEKST |
TEKST | Dane znaków o zmiennej długości, <=2 GB | TEKST |
NTEKST | Dane Unicode UCS-2 o zmiennej długości, <=2 GB | TEKST |
PODWÓJNA PRECYZJA | Liczba zmiennoprzecinkowa podwójnej precyzji | PODWÓJNA PRECYZJA |
PŁYWAJĄCY(p) | Liczba zmiennoprzecinkowa | PODWÓJNA PRECYZJA |
LICZBA CAŁKOWITA | 32-bitowa liczba całkowita | LICZBA CAŁKOWITA |
LICZBA(p,s) | Stały numer punktu | LICZBA(p,s) |
DATA | Data obejmuje rok, miesiąc i dzień | DATA |
DATETIME | Data i godzina z ułamkiem | ZNACZNIK CZASOWY(3) |
DATETIME2(p) | Data i godzina z ułamkiem | ZNACZNIK CZASOWY(n) |
DATETIMEOFFSET(p) | Data i godzina z ułamkiem i strefą czasową | ZNACZNIK CZASOWY(p) ZE STREFĄ CZASOWĄ |
SMALLDATETIME | Data i godzina | ZNACZNIK CZASOWY(0) |
MAŁYINT | 8-bitowa liczba całkowita bez znaku, od 0 do 255 | MAŁY |
UNIKALNY IDENTYFIKATOR | 16-bajtowe dane GUID(UUID) | CHAR(16) |
ROWVERSION | Automatycznie aktualizowane dane binarne | BYTEA |
MAŁE PIENIĄDZE | 32-bitowa kwota waluty | PIENIĄDZE |
OBRAZ | Dane binarne o zmiennej długości, <=2 GB | BYTEA |
Niezgodności w MS SQL Server i PostgreSQL
Istnieje wiele niezgodności występujących w MS SQL Server i PostgreSQL, niektóre z nich możesz zobaczyć tutaj. Możesz je zautomatyzować, tworząc rozszerzenia, dzięki czemu możesz korzystać z funkcji MS SQL Server tak, jak w PostgreSQL i oszczędzić swój czas.
DATAPART
DATEPART musi zostać zastąpiona przez DATE_PART w PostgreSQL.
Przykład
MS SQL:
DATEPART( datepart , date )
PostgreSQL:
date_part( text , timestamp )
date_part( text , interval )
ISNULL
Funkcja ISNULL musi zostać zastąpiona funkcją COALESCE w PostgreSQL.
Przykład
Serwer MS SQL:
ISNULL(exp, replacement)
PostgreSQL:
COALESCE(exp, replacement)
SPACE
Funkcję SPACE w MS SQL Server należy zastąpić funkcją REPEAT w PostgreSQL.
Przykład
Serwer MS SQL:
SPACE($n)
Gdzie $n to liczba spacji do zwrócenia.
PostgreSQL:
REPEAT(‘ ’, $n)
DATEADD
PostgreSQL nie zapewnia funkcji DATEADD podobnej do MS SQL Server, możesz użyć arytmetyki datetime z literałami interwałów, aby uzyskać te same wyniki.
Przykład
Serwer MS SQL:
--Add 2 day to the current date
SELECT DATEADD(day, 2, GETDATE());
PostgreSQL:
--Add 2 day to the current date
SELECT CURRENT_DATE + INTERVAL ‘2 day’;
Konkatenacja ciągów
MS SQL Server używa „+” do łączenia ciągów, podczas gdy PostgreSQL używa „||” dla tego samego.
Przykład
Serwer MS SQL:
SELECT FirstName + LastName FROM employee;
PostgreSQL:
SELECT FirstName || LastName FROM employee;
CHARINDEX
W PostgreSQL istnieje funkcja CHARINDEX. Możesz zastąpić tę funkcję odpowiednią funkcją POSITION w PostgreSQL.
Przykład
Serwer MS SQL:
SELECT CHARINDEX('our', 'resource');
PostgreSQL:
SELECT POSITION('our' in 'resource');
GETDATE
Funkcja GETDATE zwraca aktualną datę i godzinę. W PostgreSQL nie ma funkcji GETDATE, ale istnieje funkcja NOW() do tego samego celu. Jeśli istnieje wiele wystąpień funkcji GETDATE, możesz je zautomatyzować za pomocą rozszerzenia. Sprawdź, jak tworzyć moduły za pomocą rozszerzenia.
Przykład
Serwer MS SQL:
SELECT GETDATE();
PostgreSQL:
SELECT NOW();
Narzędzia
Możesz użyć niektórych narzędzi do migracji bazy danych MS SQL Server do PostgreSQL. Przetestuj narzędzie przed użyciem.
-
Pgloader
Możesz użyć narzędzia pgloader do migracji bazy danych MS SQL do PostgreSQL. Polecenia w pgloaderze ładują dane z bazy danych MS SQL. Pgloader obsługuje automatyczne wykrywanie schematu, w tym budowanie indeksów, ograniczenia klucza podstawowego i kluczy obcych.
Pgloader zapewnia różne reguły rzutowania, które mogą konwertować typ danych MS SQL na typ danych PostgreSQL.
-
Sqlserver2pgsql
Jest to kolejne narzędzie do migracji typu open source do konwersji bazy danych Microsoft SQL Server na bazę danych PostgreSQL, tak automatycznie, jak to możliwe. Sqlserver2pgsql jest napisany w Perlu.
Narzędzie Sqlserver2pgsql robi dwie rzeczy:
- Konwertuje schemat SQL Server na schemat PostgreSQL
- Może stworzyć wysięgnik Pentaho Data Integrator (Cettle) do migracji wszystkich danych z SQL Server do PostgreSQL. To jest część opcjonalna.
Testowanie
Testowanie aplikacji i migrowanej bazy danych jest bardzo ważne, ponieważ niektóre funkcje są takie same w obu bazach danych, jednak zachowanie jest inne.
Należy sprawdzić niektóre typowe scenariusze:
- Sprawdź, czy wszystkie obiekty bazy danych są poprawnie przekonwertowane, czy nie.
- Sprawdź, czy zachowanie wszystkich funkcji w DML działa poprawnie, czy nie.
- Załaduj przykładowe dane do obu baz danych i sprawdź wyniki wszystkich zapytań DML w obu bazach danych. Wynik wszystkich zapytań SQL powinien być taki sam.
- Sprawdź wydajność DML i popraw ją, jeśli to konieczne.