sql >> Database >  >> RDS >> PostgreSQL

Migreren van DB2 naar PostgreSQL - Wat u moet weten

Of het migreren van een database of een toepassing van DB2 naar PostgreSQL met slechts één type databasekennis niet voldoende is, er zijn weinig dingen te weten over de verschillen tussen de twee databasesystemen.

PostgreSQL is 's werelds meest gebruikte geavanceerde open source database. De PostgreSQL-database heeft een uitgebreide reeks functies en de PostgreSQL-gemeenschap is erg sterk en ze verbeteren voortdurend de bestaande functies en voegen nieuwe functies toe. Volgens db-engine.com is PostgreSQL de DBMS van het jaar 2017 en 2018.

Zoals u weet zijn DB2 en PostgreSQL RDBMS, maar er zijn enkele onverenigbaarheden. In deze blog kunnen we enkele van deze onverenigbaarheden zien.

Waarom migreren van DB2 naar PostgreSQL

  1. Flexibele open source-licenties en gemakkelijke beschikbaarheid van openbare cloudproviders zoals AWS, Google cloud, Microsoft Azure.
  2. Profiteer van open source-add-ons om de databaseprestaties te verbeteren.

U kunt in de onderstaande afbeelding zien dat de populariteit van PostgreSQL in de loop van de tijd toeneemt in vergelijking met DB2.

Interesse in de loop van de tijd

Migratiebeoordeling

De eerste stap van de migratie is het analyseren van de applicatie en het databaseobject, het achterhalen van de incompatibiliteit tussen beide databases en het inschatten van de tijd en kosten die nodig zijn voor de migratie.

Gegevenstypetoewijzing

Sommige gegevenstypen van IBM DB2 komen niet rechtstreeks overeen met PostgreSQL-gegevenstypen, dus u moet deze wijzigen in het corresponderende PostgreSQL-gegevenstype.

Controleer de onderstaande tabel.

IBM DB2 PostgreSQL
BIGINT 64-bits geheel getal GROOT
BLOB(n) Binair groot object BYTEA
CLOB(n) Karakter groot object TEKST
DBCLOB(n) UTF-16 karakter groot object TEKST
NCLOB(n) UTF-16 karakter groot object TEKST
CHAR(n), CHARACTER(n) Tekenreeks met vaste lengte CHAR(n)
KARAKTER VARIANT(n) Tekenreeks met variabele lengte VARCHAR(n)
NCHAR(n) UTF-16-tekenreeks met vaste lengte CHAR(n)
NCHAR VARYING(n) UTF-16-tekenreeks met variabele lengte VARCHAR(n)
VARCHAR(n) Tekenreeks met variabele lengte VARCHAR(n)
VARGRAPHIC(n) UTF-16-tekenreeks met variabele lengte VARCHAR(n)
VARCHAR(n) VOOR BIT DATA Bytetekenreeks met variabele lengte BYTEA
NVARCHAR(n) UTF-16-tekenreeks met verschillende lengtes VARCHAR(n)
GRAFISCH(n) Vaste lengte UTF-16 string CHAR(n)
INTEGER 32-bits geheel getal INTEGER
NUMERIEK(p,s) Vast nummer NUMERIEK(p,s)
DECIMAAL(p,s) Vast nummer DECIMAAL(p,s)
DUBBELE PRECISIE Drijvende-kommagetal met dubbele precisie DUBBELE PRECISIE
FLOAT(p) Drijvende-kommagetal met dubbele precisie DUBBELE PRECISIE
ECHT Enkel nauwkeurig getal met drijvende komma ECHT
KLEIN 16-bits geheel getal SMALLINT
DATUM Datum (jaar, maand en dag) DATUM
TIJD TIJD (uur, minuut en seconde) TIME(0)
TIMESTAMP(p) Datum en tijd met breuk TIMESTAMP(p)
DECFLOAT(16 | 34) IEEE drijvende komma nummer FLOAT

Incompatibiliteiten in DB2 en PostgreSQL

Er zijn veel incompatibiliteiten aanwezig in DB2 en PostgreSQL, u kunt er hier enkele bekijken. U kunt ze automatiseren door extensies te maken, zodat u de DB2-functie kunt gebruiken zoals deze is in PostgreSQL en u tijd kunt besparen. Controleer het gedrag van de DB2-functie in PostgreSQL

TABELRUIMTE

De clausule TABLESPACE definieert de naam van de tabelruimte waarin de nieuw gemaakte tabel zich bevindt.

DB2 gebruikt de IN-clausule voor TABLESPACE, dus deze moet worden vervangen door de TABLESPACE-clausule in PostgreSQL.

Voorbeeld:

DB2:

IN <tablespace_name>

PostgreSQL:

TABLESPACE <tablespace_name>

ALLEEN EERSTE FETCH n RIJEN

In DB2 kunt u de clausule FETCH FIRST n ROWS ONLY gebruiken om niet meer dan n rijen op te halen. In PostgreSQL kunt u LIMIT n gebruiken, wat overeenkomt met ALLEEN FETCH FIRST n RIJEN.

Voorbeeld:

DB2:

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

PostgreSQL:

SELECT * FROM EMP
 ORDER BY EMPID
 LIMIT 10;

STANDAARD GEGENEREERD ALS IDENTITEIT

De IDENTITY-kolom in DB2 kan worden vervangen door de Serial-kolom in 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
);

Selecteer uit SYSIBM.SYSDUMMY1

Er is geen tabel "SYSIBM.SYSDUMMY1" in PostgreSQL. PostgreSQL staat een "SELECT" zonder "FROM"-clausule toe. Je kunt dit verwijderen door een script te gebruiken.

Scalaire functies:DB2 vs PostgreSQL

PLAFOND/PLAFOND

CEIL of CEILING retourneert de eerstvolgende kleinste gehele waarde die groter is dan of gelijk is aan de invoer (bijv. CEIL(122.89) geeft 123 terug, ook geeft CEIL(122.19) 123 terug).

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

Het converteert de invoer naar datumwaarden. U kunt de DATE-functie converteren naar de TO_DATE-functie in PostgreSQL.

DB2:

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

PostgreSQL:

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

DAG

Het retourneert het dagdeel (dag van de maand) van een datum of een equivalente waarde. Het uitvoerformaat is geheel getal.

DB2:

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

PostgreSQL:

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

MAAND

Het retourneert het maandgedeelte van de datumwaarde. Het uitvoerformaat is geheel getal.

DB2:

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

PostgreSQL:

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

POSSTR

Retourneert de positie van de tekenreeks. De functie POSSTR is vervangen door de functie POSITION in 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

Het retourneert een pseudowillekeurige drijvende-kommawaarde in het bereik van nul tot en met één. U kunt de RAND-functie vervangen door RANDOM in PostgreSQL.

DB2:

SELECT RAND() FROM SYSIBM.SYSDUMMY1;

PostgreSQL:

SELECT RANDOM();
Download de whitepaper vandaag PostgreSQL-beheer en -automatisering met ClusterControlLees wat u moet weten om PostgreSQL te implementeren, bewaken, beheren en schalenDownload de whitepaper

Extra

U kunt een aantal hulpprogramma's gebruiken om de DB2-database naar PostgreSQL te migreren. Test de tool voordat je hem gebruikt.

  1. Db2topg

    Het is een geautomatiseerd hulpmiddel voor migratie van DB2 naar PostgreSQL, zoals ora2pg. De scripts in het hulpprogramma db2pg zetten zoveel mogelijk van een DB2 UDB-database om. Dit hulpprogramma werkt niet met DB2 zOS. Het is heel eenvoudig te gebruiken, je hebt een SQL-dump van je schema nodig en gebruik dan het db2pg-script om het naar een PostgreSQL-schema te converteren.

  2. Volledige conversie

    Enterprise-tool kopieert snel de DB2-database naar PostgreSQL. De conversie van DB2 naar PostgreSQL-database met behulp van de tool Full Convert is heel eenvoudig.
    Stappen:

    • Maak verbinding met de brondatabase, d.w.z. DB2
    • Optioneel:kies de tabellen die u wilt converteren (standaard alle geselecteerde tabellen)
    • Start de conversie.

Conclusie

Zoals we konden zien, is migreren van DB2 naar PostgreSQL geen rocket science, maar we moeten in gedachten houden wat we eerder hebben gezien om grote problemen in ons systeem te voorkomen. We hoeven dus alleen maar voorzichtig te zijn in de taak en doorgaan, u kunt migreren naar de meest geavanceerde open source-database en profiteren van de voordelen ervan.


  1. Monitoring Percona Server voor MySQL - Belangrijkste metrische gegevens

  2. Hoe gegevens te herstellen van een verwijderde Docker-container? Hoe kan ik het opnieuw verbinden met de gegevens?

  3. Records van de afgelopen 7 dagen ophalen in MySQL

  4. Externe sleutel met meerdere kolommen in MySQL?