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
- Fleksibel open source-licensering og nem tilgængelighed fra offentlige cloud-udbydere som AWS, Google cloud, Microsoft Azure.
- 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.
-
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.
-
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.