Ať už migrace databáze nebo aplikace z DB2 na PostgreSQL s pouze jedním typem znalostí databáze nestačí, existuje jen málo věcí, které byste měli vědět o rozdílech mezi těmito dvěma databázovými systémy.
PostgreSQL je celosvětově nejrozšířenější pokročilá open source databáze. Databáze PostgreSQL má bohatou sadu funkcí a komunita PostgreSQL je velmi silná a neustále vylepšuje stávající funkce a přidává nové funkce. Podle db-engine.com je PostgreSQL DBMS roku 2017 a 2018.
Jak víte, DB2 a PostgreSQL jsou RDBMS, ale existují určité nekompatibility. V tomto blogu můžeme vidět některé z těchto nekompatibilit.
Proč migrovat z DB2 na PostgreSQL
- Flexibilní open source licencování a snadná dostupnost od veřejných poskytovatelů cloudu, jako je AWS, Google cloud, Microsoft Azure.
- Využijte výhody open source doplňků ke zlepšení výkonu databáze.
Na obrázku níže můžete vidět, že popularita PostgreSQL v porovnání s DB2 postupem času roste.
Zájem v průběhu času
Posouzení migrace
Prvním krokem migrace je analýza aplikace a databázového objektu, zjištění nekompatibility mezi oběma databázemi a odhad času a nákladů potřebných k migraci.
Mapování datových typů
Některé datové typy IBM DB2 se přímo neshodují s datovými typy PostgreSQL, takže je musíte změnit na odpovídající datový typ PostgreSQL.
Zkontrolujte prosím níže uvedenou tabulku.
IBM DB2 | PostgreSQL | |
VELKÝ | 64bitové celé číslo | VELKÝ |
BLOB(n) | Binární velký objekt | BYTEA |
CLOB(n) | Znak velký objekt | TEXT |
DBCLOB(n) | Velký objekt UTF-16 | TEXT |
NCLOB(n) | Velký objekt UTF-16 | TEXT |
CHAR(n), CHARACTER(n) | Řetězec s pevnou délkou | CHAR(n) |
CHARACTER VARYING(n) | Řetězec s proměnnou délkou | VARCHAR(n) |
NCHAR(n) | Řetězec UTF-16 s pevnou délkou | CHAR(n) |
NCHAR VARYING(n) | Řetězec UTF-16 s proměnnou délkou | VARCHAR(n) |
VARCHAR(n) | Řetězec s proměnnou délkou | VARCHAR(n) |
VARGRAPHIC(n) | Řetězec UTF-16 s proměnnou délkou | VARCHAR(n) |
VARCHAR(n) PRO BITOVÁ DATA | Bajtový řetězec s proměnnou délkou | BYTEA |
NVARCHAR(n) | Řetězec UTF-16 různé délky | VARCHAR(n) |
GRAPHIC(n) | Řetězec pevné délky UTF-16 | CHAR(n) |
INTEGER | 32bitové celé číslo | INTEGER |
NUMERIC(p,s) | Číslo s pevnou čárkou | NUMERIC(p,s) |
DECIMAL(p,s) | Číslo s pevnou čárkou | DECIMAL(p,s) |
DVOJNÁSOBNÁ PŘESNOST | Číslo s plovoucí desetinnou čárkou s dvojitou přesností | DVOJNÁSOBNÁ PŘESNOST |
FLOAT(p) | Číslo s plovoucí desetinnou čárkou s dvojitou přesností | DVOJNÁSOBNÁ PŘESNOST |
SKUTEČNÉ | Jednoduché číslo s plovoucí desetinnou čárkou | SKUTEČNÉ |
SMALLINT | 16bitové celé číslo | SMALLINT |
DATUM | Datum (rok, měsíc a den) | DATUM |
ČAS | TIME (hodina, minuta a sekunda) | TIME(0) |
TIMESTAMP(p) | Datum a čas se zlomkem | TIMESTAMP(p) |
DECFLOAT(16 | 34) | IEEE Číslo s pohyblivou řádovou čárkou | PLOVÁVÁNÍ |
Nekompatibilita v DB2 a PostgreSQL
V DB2 a PostgreSQL je mnoho nekompatibilit, některé z nich můžete vidět zde. Můžete je automatizovat vytvořením rozšíření, abyste mohli používat funkci DB2 tak, jak je v PostgreSQL a ušetřit čas. Zkontrolujte prosím chování funkce DB2 v PostgreSQL
TABLESPACE
Klauzule TABLESPACE definuje název tabulkového prostoru, ve kterém se nachází nově vytvořená tabulka.
DB2 používá klauzuli IN pro TABLESPACE, takže by měla být v PostgreSQL nahrazena klauzuli TABLESPACE.
Příklad:
DB2:
IN <tablespace_name>
PostgreSQL:
TABLESPACE <tablespace_name>
PRVNÍ NAČTENÍ POUZE n ŘÁDKŮ
V DB2 můžete použít klauzuli FETCH FIRST n ROWS ONLY k načtení ne více než n řádků. V PostgreSQL můžete použít LIMIT n, což je ekvivalentní FETCH FIRST n ROWS ONLY.
Příklad:
DB2:
SELECT * FROM EMP
ORDER BY EMPID
FETCH FIRST 10 ROWS ONLY;
PostgreSQL:
SELECT * FROM EMP
ORDER BY EMPID
LIMIT 10;
VÝCHOZÍ GENEROVÁNÍ JAKO IDENTITA
Sloupec IDENTITY v DB2 lze nahradit sloupcem Serial v 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
);
Vyberte z SYSIBM.SYSDUMMY1
V PostgreSQL není žádná tabulka „SYSIBM.SYSDUMMY1“. PostgreSQL umožňuje „SELECT“ bez klauzule „FROM“. Můžete to odstranit pomocí skriptu.
Skalární funkce:DB2 vs PostgreSQL
STROP/STROP
CEIL nebo CEILING vrátí nejbližší nejmenší celočíselnou hodnotu, která je větší nebo rovna vstupu (např. CEIL(122,89) vrátí 123, také CEIL(122,19) vrátí 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) ;
DATUM
Převádí vstup na hodnoty data. Funkci DATE můžete převést na funkci TO_DATE v PostgreSQL.
DB2:
SELECT DATE ('2018-09-21') FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT TO_DATE ('21-09-2018',’DD-MM-YYYY’) ;
DEN
Vrací den (den v měsíci) část data nebo ekvivalentní hodnotu. Výstupní formát je celé číslo.
DB2:
SELECT DAY (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART('day', '2016- 09-21'::date);
MĚSÍC
Vrátí měsíční část hodnoty data. Výstupní formát je celé číslo.
DB2:
SELECT MONTH (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART ('month', '2016-09- 21'::date);
POSSTR
Vrátí polohu řetězce. Funkce POSSTR je v PostgreSQL nahrazena funkcí POSITION.
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');
RAND
Vrací pseudonáhodnou hodnotu s plovoucí desetinnou čárkou v rozsahu od nuly do jedné včetně. V PostgreSQL můžete nahradit funkci RAND na RANDOM.
DB2:
SELECT RAND() FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT RANDOM();
Stáhněte si Whitepaper Today Správa a automatizace PostgreSQL s ClusterControlZjistěte, co potřebujete vědět k nasazení, monitorování, správě a škálování PostgreSQLStáhněte si Whitepaper Nástroje
K migraci databáze DB2 do PostgreSQL můžete použít některé nástroje. Před použitím nástroj otestujte.
-
Db2topg
Je to automatický nástroj pro migraci DB2 na PostgreSQL, jako je ora2pg. Skripty v nástroji db2pg převedou co nejvíce z databáze DB2 UDB. Tento nástroj nefunguje s DB2 zOS. Jeho použití je velmi jednoduché, potřebujete výpis SQL vašeho schématu a poté jej pomocí skriptu db2pg převeďte na schéma PostgreSQL.
-
Úplný převod
Podnikový nástroj rychle zkopíruje databázi DB2 do PostgreSQL. Konverze DB2 do PostgreSQL databáze pomocí nástroje Full Convert je velmi jednoduchá.
Kroky:- Připojte se ke zdrojové databázi, tj. DB2
- Volitelné:Vyberte tabulky, které chcete převést (ve výchozím nastavení jsou vybrány všechny tabulky)
- Spusťte konverzi.
Závěr
Jak jsme viděli, migrace z DB2 na PostgreSQL není žádná velká věda, ale musíme mít na paměti to, co jsme viděli dříve, abychom se vyhnuli velkým problémům v našem systému. Takže musíme být v úkolu opatrní a pokračovat, můžete migrovat na nejpokročilejší open source databázi a využívat jejích výhod.