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
- Flexibele open source-licenties en gemakkelijke beschikbaarheid van openbare cloudproviders zoals AWS, Google cloud, Microsoft Azure.
- 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.
-
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.
-
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.