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

Migracja z MSSQL do PostgreSQL — co powinieneś wiedzieć

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?

  1. 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.
  2. 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.
  3. Elastyczne licencjonowanie open source i łatwa dostępność od dostawców chmury publicznej, takich jak AWS, chmura Google itp.
  4. 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
Pobierz oficjalny dokument już dziś Zarządzanie i automatyzacja PostgreSQL za pomocą ClusterControlDowiedz się, co musisz wiedzieć, aby wdrażać, monitorować, zarządzać i skalować PostgreSQLPobierz oficjalny dokument

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.

  1. 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.

  2. 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:

    1. Konwertuje schemat SQL Server na schemat PostgreSQL
    2. 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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Proaktywne monitorowanie PostgreSQL (program Developer Studio/Advisors)

  2. Zwróć uniksowy znacznik czasu w PostgreSQL

  3. Ukryte funkcje PostgreSQL

  4. Wdrożenie klastra PostgreSQL Multi-Cloud Cluster

  5. Konwertuj tablicę PostgreSQL na tablicę PHP