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

Migracja z DB2 do PostgreSQL — co powinieneś wiedzieć

Niezależnie od tego, czy migracja bazy danych lub aplikacji z DB2 do PostgreSQL z tylko jednym rodzajem wiedzy o bazach danych nie jest wystarczająca, należy wiedzieć niewiele o różnicach między tymi dwoma systemami baz danych.

PostgreSQL to najczęściej używana na świecie zaawansowana baza danych typu open source. Baza danych PostgreSQL ma bogaty zestaw funkcji, a społeczność PostgreSQL jest bardzo silna i stale ulepsza istniejące funkcje i dodaje nowe. Zgodnie z db-engine.com, PostgreSQL jest DBMS roku 2017 i 2018.

Jak wiesz, DB2 i PostgreSQL to RDBMS, ale są pewne niezgodności. Na tym blogu możemy zobaczyć niektóre z tych niezgodności.

Dlaczego migrować z DB2 do PostgreSQL

  1. Elastyczne licencjonowanie open source i łatwa dostępność od dostawców chmury publicznej, takich jak AWS, chmura Google, Microsoft Azure.
  2. Skorzystaj z dodatków typu open source, aby poprawić wydajność bazy danych.

Na poniższym obrazku widać, że popularność PostgreSQL rośnie z biegiem czasu w porównaniu z DB2.

Odsetki w czasie

Ocena migracji

Pierwszym krokiem migracji jest analiza aplikacji i obiektu bazy danych, znalezienie niezgodności między obiema bazami danych oraz oszacowanie czasu i kosztów wymaganych do migracji.

Mapowanie typu danych

Niektóre typy danych IBM DB2 nie pasują bezpośrednio do typów danych PostgreSQL, więc musisz zmienić je na odpowiedni typ danych PostgreSQL.

Sprawdź poniższą tabelę.

IBM DB2 PostgreSQL
WIELKIE 64-bitowa liczba całkowita WIELKIE
BLOB(n) Duży obiekt binarny BYTEA
CLOB(n) Duży obiekt znakowy TEKST
DBCLOB(n) UTF-16 duży obiekt znaków TEKST
NCLOB(n) UTF-16 duży obiekt znaków TEKST
ZNAK(n), ZNAK(n) Ciąg o stałej długości ZNAK(n)
ZMIENNE ZNAKI (n) Ciąg o zmiennej długości VARCHAR(n)
NCHAR(n) Ciąg UTF-16 o stałej długości ZNAK(n)
NCHAR RÓŻNE(n) Ciąg UTF-16 o zmiennej długości VARCHAR(n)
VARCHAR(n) Ciąg o zmiennej długości VARCHAR(n)
WARGRAFIKA(n) Ciąg UTF-16 o zmiennej długości VARCHAR(n)
VARCHAR(n) DLA DANYCH BITOWYCH Ciąg bajtów o zmiennej długości BYTEA
NVARCHAR(n) Ciąg UTF-16 o zmiennej długości VARCHAR(n)
GRAFIKA(n) ciąg znaków UTF-16 o stałej długości ZNAK(n)
LICZBA CAŁKOWITA 32-bitowa liczba całkowita LICZBA CAŁKOWITA
LICZBA(p,s) Liczba punktów stałych LICZBA(p,s)
DZIESIĘTNY(p,s) Liczba punktów stałych DZIESIĘTNY(p,s)
PODWÓJNA PRECYZJA Liczba zmiennoprzecinkowa podwójnej precyzji PODWÓJNA PRECYZJA
PŁYWAJĄCY(p) Liczba zmiennoprzecinkowa podwójnej precyzji PODWÓJNA PRECYZJA
PRAWDZIWE Liczba zmiennoprzecinkowa o pojedynczej precyzji PRAWDZIWE
MAŁY 16-bitowa liczba całkowita MAŁY
DATA Data (rok, miesiąc i dzień) DATA
CZAS CZAS (godzina, minuta i sekunda) CZAS(0)
ZNACZNIK CZASOWY(p) Data i godzina z ułamkiem ZNACZNIK CZASOWY(p)
DECFLOAT(16 | 34) Liczba zmiennoprzecinkowa IEEE PŁYWAJĄCY

Niezgodności w DB2 i PostgreSQL

Istnieje wiele niezgodności występujących w DB2 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 DB2 tak, jak w PostgreSQL i oszczędzić swój czas. Sprawdź zachowanie funkcji DB2 w PostgreSQL

PRZESTRZEŃ STOŁOWA

Klauzula TABLESPACE określa nazwę obszaru tabel, w którym znajduje się nowo utworzona tabela.

DB2 używa klauzuli IN dla TABLESPACE, więc należy ją zastąpić klauzulą ​​TABLESPACE w PostgreSQL.

Przykład:

DB2:

IN <tablespace_name>

PostgreSQL:

TABLESPACE <tablespace_name>

TYLKO PIERWSZE POBIERANIE n WIERSZY

W DB2 można użyć klauzuli FETCH FIRST n ROWS ONLY, aby pobrać nie więcej niż n wierszy. W PostgreSQL możesz użyć LIMIT n, co jest równoważne FETCH FIRST n ROWS ONLY.

Przykład:

DB2:

SELECT * FROM EMP
 ORDER BY EMPID
 FETCH FIRST 10 ROWS ONLY;

PostgreSQL:

SELECT * FROM EMP
 ORDER BY EMPID
 LIMIT 10;

GENEROWANE DOMYŚLNIE JAKO TOŻSAMOŚĆ

Kolumnę IDENTITY w DB2 można zastąpić kolumną Serial w PostgreSQL.

DB2:

CREATE TABLE <table_name> (
<column_name> INTEGER NOT NULL
 GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1, CACHE 20) 
);

PostgreSQL:

CREATE TABLE <table_name> (
<column_name>  SERIAL NOT NULL
);

Wybierz z SYSIBM.SYSDUMMY1

W PostgreSQL nie ma tabeli „SYSIBM.SYSDUMMY1”. PostgreSQL zezwala na „SELECT” bez klauzuli „FROM”. Możesz to usunąć za pomocą skryptu.

Funkcje skalarne:DB2 kontra PostgreSQL

SUFIT / SUFIT

CEIL lub CEILING zwraca następną najmniejszą liczbę całkowitą, która jest większa lub równa wartości wejściowej (np. CEIL(122.89) zwraca 123, również CEIL(122.19) zwraca 123).

DB2:

SELECT CEIL(123.89) FROM SYSIBM.SYSDUMMY1; 
SELECT CEILING(123.89) FROM SYSIBM.SYSDUMMY1;

PostgreSQL:

SELECT CEIL(123.89) ; 
SELECT CEILING(123.89) ;

DATA

Konwertuje dane wejściowe na wartości daty. Możesz przekonwertować funkcję DATE na funkcję TO_DATE w PostgreSQL.

DB2:

SELECT DATE ('2018-09-21') FROM SYSIBM.SYSDUMMY1;

PostgreSQL:

SELECT TO_DATE ('21-09-2018',’DD-MM-YYYY’) ;

DZIEŃ

Zwraca dzień (dzień miesiąca) część daty lub równoważną wartość. Format wyjściowy to liczba całkowita.

DB2:

SELECT DAY (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;

PostgreSQL:

SELECT DATE_PART('day', '2016- 09-21'::date);

MIESIĄC

Zwraca część miesiąca wartości daty. Format wyjściowy to liczba całkowita.

DB2:

SELECT MONTH (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;

PostgreSQL:

SELECT DATE_PART ('month', '2016-09- 21'::date);

POSSTR

Zwraca pozycję ciągu. Funkcja POSSTR jest zastąpiona funkcją POSITION w PostgreSQL.

DB2:

Usage : POSSTR(<Filed_1>,<Field2>)
SELECT POSSTR('PostgreSQL and DB2', 'and') FROM SYSIBM.SYSDUMMY1;

PostgreSQL:

Usage: POSITION(<Field_1> IN<Field_2>)
SELECT POSITION('and' IN'PostgreSQL and DB2');

RANO

Zwraca pseudolosową wartość zmiennoprzecinkową w zakresie od zera do jednego włącznie. Możesz zamienić funkcję RAND na RANDOM w PostgreSQL.

DB2:

SELECT RAND() FROM SYSIBM.SYSDUMMY1;

PostgreSQL:

SELECT RANDOM();
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

Narzędzia

Możesz użyć niektórych narzędzi do migracji bazy danych DB2 do PostgreSQL. Przetestuj narzędzie przed użyciem.

  1. Db2topg

    Jest to zautomatyzowane narzędzie do migracji DB2 do PostgreSQL, takie jak ora2pg. Skrypty w narzędziu db2pg konwertują możliwie największą część bazy danych DB2 UDB. To narzędzie nie działa z DB2 zOS. Jest bardzo prosty w użyciu, potrzebujesz zrzutu SQL swojego schematu, a następnie użyj skryptu db2pg, aby przekonwertować go na schemat PostgreSQL.

  2. Pełna konwersja

    Narzędzie Enterprise szybko kopiuje bazę danych DB2 do PostgreSQL. Konwersja bazy danych DB2 na PostgreSQL przy użyciu narzędzia Full Convert jest bardzo prosta.
    Kroki:

    • Połącz się ze źródłową bazą danych, tj. DB2
    • Opcjonalnie:wybierz tabele, które chcesz przekonwertować (domyślnie wszystkie wybrane tabele)
    • Rozpocznij konwersję.

Wniosek

Jak widzieliśmy, migracja z DB2 do PostgreSQL nie jest nauką rakietową, ale musimy pamiętać o tym, co widzieliśmy wcześniej, aby uniknąć poważnych problemów w naszym systemie. Tak więc musimy tylko zachować ostrożność w wykonywaniu zadania i iść dalej, możesz przeprowadzić migrację do najbardziej zaawansowanej bazy danych typu open source i skorzystać z jej zalet.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django unikalne razem awaria ograniczenia?

  2. Zwróć uniksowy znacznik czasu w PostgreSQL

  3. PostgreSQL:jak przekonwertować z epoki Uniksa do tej pory?

  4. Ogranicz dostęp użytkowników PostgreSQL za pomocą schematu i widoków

  5. Postgres UNIKALNE OGRANICZENIE dla tablicy