sql >> Databáze >  >> RDS >> PostgreSQL

Migrace z DB2 na PostgreSQL – co byste měli vědět

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

  1. Flexibilní open source licencování a snadná dostupnost od veřejných poskytovatelů cloudu, jako je AWS, Google cloud, Microsoft Azure.
  2. 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.

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

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


  1. T-SQL dotaz pro zobrazení definice tabulky?

  2. Webinář:Nové funkce v PostgreSQL 11 [Následovat]

  3. Jak používat SQL kurzory pro speciální účely

  4. MySQL Group By a Součet celková hodnota jiného sloupce