sql >> Base de Datos >  >> RDS >> PostgreSQL

Migración de DB2 a PostgreSQL:lo que debe saber

Si migrar una base de datos o una aplicación de DB2 a PostgreSQL con solo un tipo de conocimiento de base de datos no es suficiente, hay algunas cosas que debe saber sobre las diferencias entre los dos sistemas de base de datos.

PostgreSQL es la base de datos avanzada de código abierto más utilizada del mundo. La base de datos de PostgreSQL tiene un rico conjunto de funciones y la comunidad de PostgreSQL es muy fuerte y están mejorando continuamente las funciones existentes y agregando nuevas funciones. Según db-engine.com, PostgreSQL es el DBMS del año 2017 y 2018.

Como sabe, DB2 y PostgreSQL son RDBMS, pero existen algunas incompatibilidades. En este blog podemos ver algunas de estas incompatibilidades.

Por qué migrar de DB2 a PostgreSQL

  1. Licencias flexibles de código abierto y fácil disponibilidad de proveedores de nube pública como AWS, Google Cloud, Microsoft Azure.
  2. Benefíciese de los complementos de código abierto para mejorar el rendimiento de la base de datos.

Puede ver en la imagen a continuación que la popularidad de PostgreSQL está aumentando con el tiempo en comparación con DB2.

Interés a lo largo del tiempo

Evaluación de la migración

El primer paso de la migración es analizar la aplicación y el objeto de la base de datos, descubrir las incompatibilidades entre ambas bases de datos y estimar el tiempo y el costo necesarios para la migración.

Asignación de tipos de datos

Algunos de los tipos de datos de IBM DB2 no coinciden directamente con los tipos de datos de PostgreSQL, por lo que debe cambiarlos al tipo de datos de PostgreSQL correspondiente.

Consulte la siguiente tabla.

IBM DB2 PostgreSQL
GRANDE entero de 64 bits GRANDE
BLOB(n) Objeto grande binario BYTEA
CLOB(n) Objeto grande de carácter TEXTO
DBCLOB(n) Objeto grande de caracteres UTF-16 TEXTO
NCLOB(n) Objeto grande de caracteres UTF-16 TEXTO
CARÁCTER(n), CARÁCTER(n) Cadena de longitud fija CHAR(n)
CARÁCTER VARIABLE(n) Cadena de longitud variable VARCHAR(n)
NCHAR(n) Cadena UTF-16 de longitud fija CHAR(n)
NCHAR VARIABLE(n) Cadena UTF-16 de longitud variable VARCHAR(n)
VARCHAR(n) Cadena de longitud variable VARCHAR(n)
VARGRAPHIC(n) Cadena UTF-16 de longitud variable VARCHAR(n)
VARCHAR(n) PARA DATOS DE BIT Cadena de bytes de longitud variable BYTEA
NVARCHAR(n) Cadena UTF-16 de longitud variable VARCHAR(n)
GRÁFICO(n) Cadena UTF-16 de longitud fija CHAR(n)
ENTERO entero de 32 bits ENTERO
NUMÉRICO(p,s) Número de punto fijo NUMÉRICO(p,s)
DECIMAL(p,s) Número de punto fijo DECIMAL(p,s)
DOBLE PRECISIÓN Número de punto flotante de precisión doble DOBLE PRECISIÓN
FLOTACIÓN(p) Número de punto flotante de precisión doble DOBLE PRECISIÓN
REAL Número de punto flotante de precisión simple REAL
ENTRADA PEQUEÑA entero de 16 bits PEQUEÑO
FECHA Fecha(año, mes y día) FECHA
TIEMPO HORA (hora, minuto y segundo) TIEMPO(0)
TIMESTAMP(p) Fecha y hora con fracción TIMESTAMP(p)
DECFLOAT(16 | 34) Número de punto flotante IEEE FLOTANTE

Incompatibilidades en DB2 y PostgreSQL

Hay muchas incompatibilidades presentes en DB2 y PostgreSQL, puede ver algunas de ellas aquí. Puede automatizarlos creando extensiones para que pueda usar la función DB2 tal como está en PostgreSQL y pueda ahorrar tiempo. Verifique el comportamiento de la función DB2 en PostgreSQL

ESPACIO DE MESA

La cláusula TABLESPACE define el nombre del tablespace en el que reside la tabla recién creada.

DB2 usa la cláusula IN para TABLESPACE, por lo que debe reemplazarse por la cláusula TABLESPACE en PostgreSQL.

Ejemplo:

DB2:

IN <tablespace_name>

PostgreSQL:

TABLESPACE <tablespace_name>

PRIMERA OBTENER n FILAS ÚNICAMENTE

En DB2, puede utilizar la cláusula FETCH FIRST n ROWS ONLY para recuperar no más de n filas. En PostgreSQL, puede usar LIMIT n que es equivalente a FETCH FIRST n ROWS ONLY.

Ejemplo:

DB2:

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

PostgreSQL:

SELECT * FROM EMP
 ORDER BY EMPID
 LIMIT 10;

GENERADA POR DEFECTO COMO IDENTIDAD

La columna IDENTIDAD en DB2 se puede reemplazar por la columna Serial en 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
);

Seleccione de SYSIBM.SYSDUMMY1

No hay una tabla "SYSIBM.SYSDUMMY1" en PostgreSQL. PostgreSQL permite una cláusula "SELECT" sin "FROM". Puede eliminar esto usando un script.

Funciones escalares:DB2 frente a PostgreSQL

TECHO/TECHO

CEIL o TECHO devuelve el siguiente valor entero más pequeño que es mayor o igual que la entrada (por ejemplo, CEIL(122.89) devuelve 123, también CEIL(122.19) devuelve 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) ;

FECHA

Convierte la entrada a valores de fecha. Puede convertir la función DATE a la función TO_DATE en PostgreSQL.

DB2:

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

PostgreSQL:

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

DÍA

Devuelve el día (día del mes) parte de una fecha o valor equivalente. El formato de salida es entero.

DB2:

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

PostgreSQL:

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

MES

Devuelve la parte del mes del valor de la fecha. El formato de salida es entero.

DB2:

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

PostgreSQL:

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

POSTRO

Devuelve la posición de la cadena. La función POSSTR se reemplaza por la función POSITION en 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');

ALEATORIO

Devuelve un valor de punto flotante pseudoaleatorio en el rango de cero a uno inclusive. Puede reemplazar la función RAND a RANDOM en PostgreSQL.

DB2:

SELECT RAND() FROM SYSIBM.SYSDUMMY1;

PostgreSQL:

SELECT RANDOM();
Descargue el documento técnico hoy Administración y automatización de PostgreSQL con ClusterControlObtenga información sobre lo que necesita saber para implementar, monitorear, administrar y escalar PostgreSQLDescargar el documento técnico

Herramientas

Puede usar algunas herramientas para migrar la base de datos DB2 a PostgreSQL. Pruebe la herramienta antes de usarla.

  1. Db2topg

    Es una herramienta automatizada para la migración de DB2 a PostgreSQL como ora2pg. Los scripts en la herramienta db2pg convierten tanto como sea posible de una base de datos DB2 UDB. Esta herramienta no funciona con DB2 zOS. Es muy simple de usar, necesita un volcado SQL de su esquema y luego usar el script db2pg para convertirlo a un esquema PostgreSQL.

  2. Conversión completa

    La herramienta empresarial copia rápidamente la base de datos DB2 a PostgreSQL. La conversión de la base de datos DB2 a PostgreSQL usando la herramienta Full Convert es muy simple.
    Pasos:

    • Conéctese a la base de datos de origen, es decir, DB2
    • Opcional:elija las tablas que desea convertir (por defecto, todas las tablas seleccionadas)
    • Inicie la conversión.

Conclusión

Como pudimos ver, migrar de DB2 a PostgreSQL no es ciencia espacial, pero debemos tener en cuenta lo que vimos anteriormente para evitar grandes problemas en nuestro sistema. Entonces, solo debemos tener cuidado en la tarea y adelante, puedes migrar a la base de datos de código abierto más avanzada y aprovechar sus beneficios.