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
- Elastyczne licencjonowanie open source i łatwa dostępność od dostawców chmury publicznej, takich jak AWS, chmura Google, Microsoft Azure.
- 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.
-
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.
-
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.