sql >> Database teknologi >  >> RDS >> PostgreSQL

Migrering fra DB2 til PostgreSQL - hvad du bør vide

Uanset om migrering af en database eller en applikation fra DB2 til PostgreSQL med kun én type databaseviden er ikke tilstrækkelig, er der få ting at vide om forskellene mellem de to databasesystemer.

PostgreSQL er verdens mest udbredte avancerede open source-database. PostgreSQL-databasen har et rigt funktionssæt, og PostgreSQL-fællesskabet er meget stærkt, og de forbedrer løbende de eksisterende funktioner og tilføjer nye funktioner. Ifølge db-engine.com er PostgreSQL årets DBMS 2017 og 2018.

Som du ved er DB2 og PostgreSQL RDBMS, men der er nogle inkompatibiliteter. I denne blog kan vi se nogle af disse uforeneligheder.

Hvorfor migrere fra DB2 til PostgreSQL

  1. Fleksibel open source-licensering og nem tilgængelighed fra offentlige cloud-udbydere som AWS, Google cloud, Microsoft Azure.
  2. Brug af open source-tilføjelser for at forbedre databasens ydeevne.

Du kan se på billedet nedenfor, at PostgreSQL-populariteten stiger over tid sammenlignet med DB2.

Interesse over tid

Migrationsvurdering

Det første trin i migreringen er at analysere applikationen og databaseobjektet, finde ud af inkompatibiliteterne mellem begge databaser og estimere den tid og omkostninger, der kræves til migrering.

Data Type Mapping

Nogle af datatyperne i IBM DB2 matcher ikke direkte med PostgreSQL-datatyper, så du skal ændre det til tilsvarende PostgreSQL-datatype.

Tjek venligst nedenstående tabel.

IBM DB2 PostgreSQL
STORT 64-bit heltal STORT
BLOB(n) Binært stort objekt BYTEA
CLOB(n) Karakter stort objekt TEKST
DBCLOB(n) UTF-16-karakter stort objekt TEKST
NCLOB(n) UTF-16-karakter stort objekt TEKST
CHAR(n), CHARACTER(n) Streng med fast længde CHAR(n)
KARAKTER VARIERER(n) Streng med variabel længde VARCHAR(n)
NCHAR(n) UTF-16-streng med fast længde CHAR(n)
NCHAR VARIERENDE(n) UTF-16-streng med variabel længde VARCHAR(n)
VARCHAR(n) Streng med variabel længde VARCHAR(n)
VARGRAFISK(n) UTF-16-streng med variabel længde VARCHAR(n)
VARCHAR(n) FOR BIT-DATA Bytestreng med variabel længde BYTEA
NVARCHAR(n) UTF-16-streng med varierende længde VARCHAR(n)
GRAFIK(n) UTF-16-streng med fast længde CHAR(n)
INTEGER 32-bit heltal INTEGER
NUMERISK(p,s) Fastpunktnummer NUMERISK(p,s)
DECIMAL(p,s) Fastpunktnummer DECIMAL(p,s)
DObbel PRÆCISION Dobbelt præcision flydende kommatal DObbel PRÆCISION
FLOAT(p) Dobbelt præcision flydende kommatal DObbel PRÆCISION
RIGTIG Enkelt nøjagtigt flydende kommanummer RIGTIG
SMALLINT 16-bit heltal SMALLINT
DATO Dato (år, måned og dag) DATO
TID TID (time, minut og sekund) TID(0)
TIMESTAMP(p) Dato og tid med brøk TIMESTAMP(p)
DECFLOAT(16 | 34) IEEE flydende kommanummer FLYDE

Inkompatibilitet i DB2 og PostgreSQL

Der er mange inkompatibiliteter til stede i DB2 og PostgreSQL, du kan se nogle af dem her. Du kan automatisere dem ved at oprette udvidelser, så du kan bruge DB2-funktionen, som den er i PostgreSQL, og du kan spare tid. Kontroller DB2-funktionens opførsel i PostgreSQL

TABELPLADS

TABLESPACE-udtrykket definerer navnet på det tablespace, hvori den nyoprettede tabel ligger.

DB2 bruger IN-udtryk til TABLESPACE, så det bør erstattes af TABLESPACE-udtryk i PostgreSQL.

Eksempel:

DB2:

IN <tablespace_name> 

PostgreSQL:

TABLESPACE <tablespace_name> 

KUN FØRSTE FETCH n RÆKKER

I DB2 kan du bruge FETCH FIRST n ROWS ONLY-sætning til ikke at hente mere end n rækker. I PostgreSQL kan du bruge LIMIT n, som KUN svarer til FETCH FIRST n ROWS.

Eksempel:

DB2:

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

PostgreSQL:

SELECT * FROM EMP
 ORDER BY EMPID
 LIMIT 10; 

GENERERET AF STANDARD SOM IDENTITET

IDENTITY-kolonnen i DB2 kan erstattes af Seriel-kolonnen i 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
); 

Vælg fra SYSIBM.SYSDUMMY1

Der er ingen "SYSIBM.SYSDUMMY1"-tabel i PostgreSQL. PostgreSQL tillader en "SELECT" uden "FROM"-klausul. Du kan fjerne dette ved at bruge script.

Skalære funktioner:DB2 vs PostgreSQL

LOFT/LOFT

CEIL eller CEILING returnerer den næstmindste heltalværdi, der er større end eller lig med inputtet (f.eks. CEIL(122.89) returnerer 123, og CEIL(122.19) returnerer 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) ;

DATO

Det konverterer input til datoværdier. Du kan konvertere DATE-funktionen til TO_DATE-funktionen i PostgreSQL.

DB2:

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

PostgreSQL:

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

DAG

Det returnerer dagen (dagen i måneden) del af en dato eller tilsvarende værdi. Outputformatet er heltal.

DB2:

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

PostgreSQL:

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

MÅNED

Det returnerer månedsdelen af ​​datoværdien. Outputformatet er heltal.

DB2:

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

PostgreSQL:

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

POSSTR

Returnerer strengens position. POSSTR-funktionen erstattes af POSITION-funktionen i 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'); 

RAND

Det returnerer en pseudotilfældig flydende kommaværdi i området fra nul til en inklusive. Du kan erstatte RAND-funktionen til RANDOM i PostgreSQL.

DB2:

SELECT RAND() FROM SYSIBM.SYSDUMMY1; 

PostgreSQL:

SELECT RANDOM(); 
Download Whitepaper Today PostgreSQL Management &Automation med ClusterControlFå flere oplysninger om, hvad du skal vide for at implementere, overvåge, administrere og skalere PostgreSQLDownload Whitepaper

Værktøjer

Du kan bruge nogle værktøjer til at migrere DB2-databasen til PostgreSQL. Test venligst værktøjet, før du bruger det.

  1. Db2topg

    Det er et automatiseret værktøj til DB2 til PostgreSQL-migrering som ora2pg. Scripts i db2pg-værktøjet konverterer så meget som muligt af en DB2 UDB-database. Dette værktøj fungerer ikke med DB2 zOS. Det er meget nemt at bruge, du skal bruge en SQL-dump af dit skema og derefter bruge db2pg script til at konvertere det til et PostgreSQL skema.

  2. Fuld konvertering

    Enterprise-værktøjet kopierer hurtigt DB2-databasen til PostgreSQL. Konverteringen af ​​DB2 til PostgreSQL-database ved hjælp af Full Convert-værktøjet er meget enkel.
    Trin:

    • Opret forbindelse til kildedatabasen, dvs. DB2
    • Valgfrit:Vælg de tabeller, du vil konvertere (som standard alle de valgte tabeller)
    • Start konverteringen.

Konklusion

Som vi kunne se, er migrering fra DB2 til PostgreSQL ikke raketvidenskab, men vi skal huske på det, vi så tidligere, for at undgå store problemer i vores system. Så vi behøver kun at være forsigtige i opgaven og gå videre, du kan migrere til den mest avancerede open source-database og drage fordel af dens fordele.


  1. Hvordan kan jeg beskrive en tabel i Oracle uden at bruge kommandoen DESCRIBE?

  2. Sådan løses adgang nægtet for bruger 'root'@'localhost' (ved hjælp af adgangskode:Ja) når du forbinder MySQL-databasen

  3. Få BLOB fra BFILE-kolonnen i Oracle

  4. MySQL – Vent i sekunder med SELECT SLEEP()