sql >> Databasteknik >  >> RDS >> PostgreSQL

Migrera från DB2 till PostgreSQL - Vad du bör veta

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

  1. Flexibel licensiering för öppen källkod och enkel tillgänglighet från offentliga molnleverantörer som AWS, Google moln, Microsoft Azure.
  2. 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.

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

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


  1. Beräkna antalet sekunder sedan ett visst datum/tid i SQLite

  2. Välja data från två olika servrar i SQL Server

  3. Hur hämtar man det aktuella värdet av en orakelsekvens utan att öka den?

  4. Hur SUBSTR()-funktionen fungerar i MySQL