Oavsett om du migrerar en databas eller ett program från DB2 till PostgreSQL med endast en typ av databaskunskap är det inte tillräckligt, det finns få saker att veta om skillnaderna mellan de två databassystemen.
PostgreSQL är världens mest använda avancerade databas med öppen källkod. PostgreSQL-databasen har en rik funktionsuppsättning och PostgreSQL-gemenskapen är mycket stark och de förbättrar kontinuerligt de befintliga funktionerna och lägger till nya funktioner. Enligt db-engine.com är PostgreSQL årets DBMS 2017 och 2018.
Som ni vet är DB2 och PostgreSQL RDBMS men det finns vissa inkompatibiliteter. I den här bloggen kan vi se några av dessa inkompatibiliteter.
Varför migrera från DB2 till PostgreSQL
- Flexibel licensiering för öppen källkod och enkel tillgänglighet från offentliga molnleverantörer som AWS, Google moln, Microsoft Azure.
- Dra nytta av tillägg med öppen källkod för att förbättra databasprestanda.
Du kan se i bilden nedan att PostgreSQL-populariteten ökar med tiden jämfört med DB2.
Intresse över tid
Migrationsbedömning
Det första steget i migreringen är att analysera applikationen och databasobjektet, ta reda på inkompatibiliteterna mellan de båda databaserna och uppskatta den tid och kostnad som krävs för migrering.
Datatypmappning
Vissa av datatyperna i IBM DB2 matchar inte direkt med PostgreSQL-datatyper, så du måste ändra den till motsvarande PostgreSQL-datatyp.
Kontrollera tabellen nedan.
IBM DB2 | PostgreSQL | |
STORT | 64-bitars heltal | STORT |
BLOB(n) | Binärt stort objekt | BYTEA |
CLOB(n) | Tecken stort objekt | TEXT |
DBCLOB(n) | UTF-16 tecken stort objekt | TEXT |
NCLOB(n) | UTF-16 tecken stort objekt | TEXT |
CHAR(n), CHARACTER(n) | Sträng med fast längd | CHAR(n) |
TECKEN VARIERAR(n) | Sträng med variabel längd | VARCHAR(n) |
NCHAR(n) | UTF-16-sträng med fast längd | CHAR(n) |
NCHAR VARIANDE(n) | UTF-16-sträng med variabel längd | VARCHAR(n) |
VARCHAR(n) | Sträng med variabel längd | VARCHAR(n) |
VARGRAPHIC(n) | UTF-16-sträng med variabel längd | VARCHAR(n) |
VARCHAR(n) FÖR BIT-DATA | Bytesträng med variabel längd | BYTEA |
NVARCHAR(n) | UTF-16-sträng med varierande längd | VARCHAR(n) |
GRAFIK(n) | UTF-16-sträng med fast längd | CHAR(n) |
INTEGER | 32-bitars heltal | INTEGER |
NUMERIC(p,s) | Fastpunktsnummer | NUMERISK(p,s) |
DECIMAL(p,s) | Fastpunktsnummer | DECIMAL(p,s) |
DUBBEL PRECISION | Dubbel precision med flyttal | DUBBEL PRECISION |
FLYTTA(p) | Dubbel precision med flyttal | DUBBEL PRECISION |
VERKLIG | Enkel precisionsflyttal | VERKLIG |
SMALLINT | 16-bitars heltal | SMALLINT |
DATUM | Datum (år, månad och dag) | DATE |
TID | TID (timme, minut och sekund) | TIME(0) |
TIMESTAMP(p) | Datum och tid med bråkdel | TIMESTAMP(p) |
DECFLOAT(16 | 34) | IEEE Flyttalsnummer | FLYTTA |
Inkompatibiliteter i DB2 och PostgreSQL
Det finns många inkompatibiliteter i DB2 och PostgreSQL, du kan se några av dem här. Du kan automatisera dem genom att skapa tillägg så att du kan använda DB2-funktionen som den är i PostgreSQL och du kan spara tid. Kontrollera DB2-funktionens beteende i PostgreSQL
BORDSPLATS
TABLESPACE-satsen definierar namnet på tabellutrymmet där den nyskapade tabellen finns.
DB2 använder IN-satsdel för TABLESPACE så den bör ersättas av TABLESPACE-satsdel i PostgreSQL.
Exempel:
DB2:
IN <tablespace_name>
PostgreSQL:
TABLESPACE <tablespace_name>
ENDAST FÖRSTA HÄMTA n RADER
I DB2 kan du använda satsen FETCH FIRST n ROWS ONLY för att inte hämta fler än n rader. I PostgreSQL kan du använda LIMIT n som motsvarar ENDAST HÄMTA FIRST n ROWS.
Exempel:
DB2:
SELECT * FROM EMP
ORDER BY EMPID
FETCH FIRST 10 ROWS ONLY;
PostgreSQL:
SELECT * FROM EMP
ORDER BY EMPID
LIMIT 10;
GENERERAD AV STANDARD SOM IDENTITET
Kolumnen IDENTITY i DB2 kan ersättas med seriell kolumn 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älj från SYSIBM.SYSDUMMY1
Det finns ingen "SYSIBM.SYSDUMMY1"-tabell i PostgreSQL. PostgreSQL tillåter en "SELECT" utan "FROM"-sats. Du kan ta bort detta genom att använda script.
Skalära funktioner:DB2 vs PostgreSQL
TAK/TAK
CEIL eller CEILING returnerar det näst minsta heltalsvärdet som är större än eller lika med indata (t.ex. CEIL(122.89) returnerar 123, även CEIL(122.19) returnerar 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
Den konverterar indata till datumvärden. Du kan konvertera DATE-funktionen till 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
Den returnerar dagen (dagen i månaden) del av ett datum eller motsvarande värde. Utdataformatet är heltal.
DB2:
SELECT DAY (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART('day', '2016- 09-21'::date);
MÅNAD
Den returnerar månadsdelen av datumvärdet. Utdataformatet är heltal.
DB2:
SELECT MONTH (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART ('month', '2016-09- 21'::date);
POSSTR
Returnerar strängens position. POSSTR-funktionen ersätts av 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
Den returnerar ett pseudoslumpmässigt flyttalsvärde i intervallet noll till och med ett. Du kan ersätta RAND-funktionen till RANDOM i PostgreSQL.
DB2:
SELECT RAND() FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT RANDOM();
Ladda ner Whitepaper Today PostgreSQL Management &Automation med ClusterControlLäs om vad du behöver veta för att distribuera, övervaka, hantera och skala PostgreSQLDladda Whitepaper Verktyg
Du kan använda några verktyg för att migrera DB2-databas till PostgreSQL. Testa verktyget innan du använder det.
-
Db2topg
Det är ett automatiserat verktyg för DB2 till PostgreSQL-migrering som ora2pg. Skripten i verktyget db2pg konverterar så mycket som möjligt av en DB2 UDB-databas. Det här verktyget fungerar inte med DB2 zOS. Det är väldigt enkelt att använda, du behöver en SQL-dump av ditt schema och använd sedan db2pg-skript för att konvertera det till ett PostgreSQL-schema.
-
Fullständig konvertering
Enterprise-verktyget kopierar snabbt DB2-databasen till PostgreSQL. Konverteringen av DB2 till PostgreSQL-databas med verktyget Full Convert är mycket enkel.
Steg:- Anslut till källdatabasen, dvs DB2
- Valfritt:Välj de tabeller som du vill konvertera (som standard är alla valda tabeller)
- Starta konverteringen.
Slutsats
Som vi kunde se är att migrera från DB2 till PostgreSQL ingen raketvetenskap, men vi måste komma ihåg det som vi såg tidigare för att undvika stora problem i vårt system. Så vi behöver bara vara försiktiga i uppgiften och gå vidare, du kan migrera till den mest avancerade databasen med öppen källkod och dra nytta av dess fördelar.