PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Migrazione da DB2 a PostgreSQL:cosa dovresti sapere

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

  1. Licenze open source flessibili e facile disponibilità da provider di cloud pubblico come AWS, Google cloud, Microsoft Azure.
  2. 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.

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

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