Se la migrazione di un database o di un'applicazione da DB2 a PostgreSQL con un solo tipo di conoscenza del database non è sufficiente, ci sono poche cose da sapere sulle differenze tra i due sistemi di database.
PostgreSQL è il database open source avanzato più utilizzato al mondo. Il database PostgreSQL ha un ricco set di funzionalità e la comunità di PostgreSQL è molto forte e migliorano continuamente le funzionalità esistenti e aggiungono nuove funzionalità. Secondo db-engine.com, PostgreSQL è il DBMS dell'anno 2017 e 2018.
Come sai DB2 e PostgreSQL sono RDBMS ma ci sono alcune incompatibilità. In questo blog possiamo vedere alcune di queste incompatibilità.
Perché migrare da DB2 a PostgreSQL
- Licenze open source flessibili e facile disponibilità da provider di cloud pubblico come AWS, Google cloud, Microsoft Azure.
- Trai vantaggio dai componenti aggiuntivi open source per migliorare le prestazioni del database.
Nell'immagine sottostante puoi vedere che la popolarità di PostgreSQL sta aumentando nel tempo rispetto a DB2.
Interessi nel tempo
Valutazione della migrazione
Il primo passaggio della migrazione consiste nell'analizzare l'applicazione e l'oggetto database, scoprire le incompatibilità tra i due database e stimare i tempi e i costi necessari per la migrazione.
Mappatura del tipo di dati
Alcuni dei tipi di dati di IBM DB2 non corrispondono direttamente ai tipi di dati PostgreSQL, quindi è necessario cambiarli nel tipo di dati PostgreSQL corrispondente.
Si prega di controllare la tabella sottostante.
IBM DB2 | PostgreSQL | |
GRANDE | Intero a 64 bit | GRANDE |
BLOB(n) | Oggetto binario grande | BYTEA |
CLOB(n) | Personaggio oggetto grande | TESTO |
DBCLOB(n) | Oggetto grande caratteri UTF-16 | TESTO |
NCLOB(n) | Oggetto grande caratteri UTF-16 | TESTO |
CHAR(n), CARATTERE(n) | Stringa a lunghezza fissa | CHAR(n) |
CARATTERE VARIABILE(n) | Stringa a lunghezza variabile | VARCHAR(n) |
NCHAR(n) | Stringa UTF-16 a lunghezza fissa | CHAR(n) |
NCHAR VARIANTE(n) | Stringa UTF-16 a lunghezza variabile | VARCHAR(n) |
VARCHAR(n) | Stringa a lunghezza variabile | VARCHAR(n) |
VARGRAPHIC(n) | Stringa UTF-16 a lunghezza variabile | VARCHAR(n) |
VARCHAR(n) PER DATI BIT | Stringa di byte a lunghezza variabile | BYTEA |
NVARCHAR(n) | Stringa UTF-16 di lunghezza variabile | VARCHAR(n) |
GRAFICO(n) | Stringa UTF-16 a lunghezza fissa | CHAR(n) |
INTERO | Intero a 32 bit | INTERO |
NUMERICO(p,s) | Numero a virgola fissa | NUMERICO(p,s) |
DECIMAL(p,s) | Numero a virgola fissa | DECIMAL(p,s) |
DOPPIA PRECISIONE | Numero in virgola mobile a doppia precisione | DOPPIA PRECISIONE |
FLOAT(p) | Numero in virgola mobile a doppia precisione | DOPPIA PRECISIONE |
REALE | Numero in virgola mobile a precisione singola | REALE |
PICCOLA | Intero a 16 bit | SMALLINT |
DATA | Data(anno, mese e giorno) | DATA |
TEMPO | ORA (ora, minuti e secondi) | ORA(0) |
TIMESTAMP(p) | Data e ora con frazione | TIMESTAMP(p) |
DECFLOAT(16 | 34) | Numero in virgola mobile IEEE | GALLEGGIANTE |
Incompatibilità in DB2 e PostgreSQL
Ci sono molte incompatibilità presenti in DB2 e PostgreSQL, puoi vederne alcune qui. Puoi automatizzarli creando estensioni in modo da poter utilizzare la funzione DB2 così com'è in PostgreSQL e risparmiare tempo. Si prega di verificare il comportamento della funzione DB2 in PostgreSQL
SPAZIO PER TAVOLA
La clausola TABLESPACE definisce il nome del tablespace in cui risiede la tabella appena creata.
DB2 utilizza la clausola IN per TABLESPACE, quindi dovrebbe essere sostituita dalla clausola TABLESPACE in PostgreSQL.
Esempio:
DB2:
IN <tablespace_name>
PostgreSQL:
TABLESPACE <tablespace_name>
SOLO PRIMO RECUPERO n RIGHE
In DB2, è possibile utilizzare la clausola FETCH FIRST n ROWS ONLY per recuperare non più di n righe. In PostgreSQL, puoi usare LIMIT n che equivale a FETCH FIRST n ROWS ONLY.
Esempio:
DB2:
SELECT * FROM EMP
ORDER BY EMPID
FETCH FIRST 10 ROWS ONLY;
PostgreSQL:
SELECT * FROM EMP
ORDER BY EMPID
LIMIT 10;
GENERATO PER DEFAULT COME IDENTITÀ
La colonna IDENTITY in DB2 può essere sostituita dalla colonna Serial 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
);
Seleziona da SYSIBM.SYSDUMMY1
Non esiste una tabella "SYSIBM.SYSDUMMY1" in PostgreSQL. PostgreSQL consente una clausola "SELECT" senza "FROM". Puoi rimuoverlo usando lo script.
Funzioni scalari:DB2 vs PostgreSQL
SOFFITTO/SOFFITTO
CEIL o CEILING restituisce il successivo valore intero più piccolo maggiore o uguale all'input (ad es. CEIL(122.89) restituisce 123, anche CEIL(122.19) restituisce 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) ;
DATA
Converte l'input in valori di data. Puoi convertire la funzione DATA in funzione TO_DATE in PostgreSQL.
DB2:
SELECT DATE ('2018-09-21') FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT TO_DATE ('21-09-2018',’DD-MM-YYYY’) ;
GIORNO
Restituisce la parte del giorno (giorno del mese) di una data o un valore equivalente. Il formato di output è intero.
DB2:
SELECT DAY (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART('day', '2016- 09-21'::date);
MESE
Restituisce la parte del mese del valore della data. Il formato di output è intero.
DB2:
SELECT MONTH (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT DATE_PART ('month', '2016-09- 21'::date);
POSSTR
Restituisce la posizione della stringa. La funzione POSSTR è sostituita dalla funzione 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
Restituisce un valore a virgola mobile pseudocasuale compreso tra zero e uno compreso. Puoi sostituire la funzione RAND in RANDOM in PostgreSQL.
DB2:
SELECT RAND() FROM SYSIBM.SYSDUMMY1;
PostgreSQL:
SELECT RANDOM();
Scarica il whitepaper oggi Gestione e automazione di PostgreSQL con ClusterControlScopri cosa devi sapere per distribuire, monitorare, gestire e ridimensionare PostgreSQLScarica il whitepaper Strumenti
È possibile utilizzare alcuni strumenti per migrare il database DB2 a PostgreSQL. Si prega di testare lo strumento prima di usarlo.
-
Db2topg
È uno strumento automatizzato per la migrazione da DB2 a PostgreSQL come ora2pg. Gli script nello strumento db2pg convertono il più possibile un database DB2 UDB. Questo strumento non funziona con DB2 zOS. È molto semplice da usare, è necessario un dump SQL del proprio schema e quindi utilizzare lo script db2pg per convertirlo in uno schema PostgreSQL.
-
Conversione completa
Lo strumento Enterprise copia rapidamente il database DB2 su PostgreSQL. La conversione del database DB2 in PostgreSQL utilizzando lo strumento Full Convert è molto semplice.
Passaggi:- Connettiti al database di origine, ad esempio DB2
- Facoltativo:scegli le tabelle che vuoi convertire (per impostazione predefinita tutte le tabelle selezionate)
- Inizia la conversione.
Conclusione
Come abbiamo potuto vedere, la migrazione da DB2 a PostgreSQL non è scienza missilistica, ma dobbiamo tenere a mente ciò che abbiamo visto in precedenza per evitare grossi problemi nel nostro sistema. Quindi, dobbiamo solo stare attenti nell'attività e andare avanti, puoi migrare al database open source più avanzato e sfruttarne i vantaggi.