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
- Licencias flexibles de código abierto y fácil disponibilidad de proveedores de nube pública como AWS, Google Cloud, Microsoft Azure.
- 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.
-
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.
-
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.