Validación de la migración de PostgreSQL a MySQL

La etapa más importante de la migración de PostgreSQL a MySQL es validar la base de datos de destino. Este artículo explora el proceso de validación para los siguientes objetos de base de datos:

  • Definiciones de tablas
  • Datos
  • Índices
  • Llaves extranjeras
  • Puntos de vista

Definiciones de tablas

Para explorar la definición de tabla en PostgreSQL, ejecute la instrucción SQL d nombre_tabla

La definición de la tabla se puede obtener en MySQL de dos formas:

  • El cliente de la consola mysql estándar lo expone ejecutando la declaración SQL DESC table_name
  • phpMyAdmin expone información relacionada para la tabla resaltada en el panel izquierdo en la pestaña ‘Estructura’

La tabla de PostgreSQL se migra a MySQL correctamente si cada columna tiene el mismo tipo, tamaño y valor predeterminado en comparación con la tabla resultante. El mapeo de tipos apropiado es el siguiente:

PostgreSQL MySQL
FORMACIÓN TEXTO LARGO
EMPEZANDO EMPEZANDO
GRANDE BIGINT auto_increment
BOOLEAN POCO
BYTEA LONGBLOB
CHAR (n), CARÁCTER (n) CHAR (n), CARÁCTER (n)
CIDR VARCHAR (43)
FECHA FECHA
DECIMAL (p, s), DEC (p, s) DECIMAL (p, s), DEC (p, s)
PRECISIÓN DOBLE DOBLE
FLOTADOR (p) FLOTADOR (p)
INET VARCHAR (43)
INT, INTEGER EN T
INTERVALO HORA
JSON TEXTO LARGO
LÍNEA LINESTRING
DINERO DECIMAL (19,2)
NUMÉRICO (p, s) DECIMAL (p, s)
REAL FLOTADOR
DE SERIE IDENTIDAD INT
PEQUEÑO PEQUEÑO
TEXTO TEXTO LARGO
HORA (p) HORA (p)
TIMESTAMP FECHA Y HORA
TSVECTOR TEXTO LARGO
TSQUERY TEXTO LARGO
UUID VARCHAR (36)
VARCHAR (n) VARCHAR (n)
XML TEXTO LARGO

Datos

La validación de los datos migrados debe comenzar verificando que las tablas de PostgreSQL y MySQL tengan el mismo recuento de filas. Ambos sistemas de gestión de bases de datos permiten extraer el número de filas de la tabla mediante la siguiente consulta:

SELECCIONAR COUNT

FROM nombre_tabla

Se puede realizar una validación adicional mediante la comparación manual de fragmentos aleatorios de tablas de Postgres y MySQL. PostgreSQL permite extraer fragmentos de datos a partir del desplazamiento especificado de la siguiente manera:

SELECT * FROM table_name LIMIT número_de_registros OFFSET start_record

MySQL proporciona una consulta SELECT similar para el mismo propósito:

SELECT * FROM table_name LIMIT start_record, number_of_records

Índices

El índice se migra correctamente si en la base de datos de destino tiene la misma lista de columnas y propiedades que la original. PostgreSQL expone información sobre índices en la parte inferior de la definición de tabla generada por el comando: d nombre_tabla

  • MySQL enumera los índices mediante una de las siguientes opciones:
  • a través de la instrucción SQL SHOW INDEXES FROM table_name;

En phpMyAdmin, resalte la tabla en el panel izquierdo, vaya a la pestaña ‘Estructura’ y todos los índices se enumerarán justo después de la estructura de la tabla

Llaves extranjeras

Los criterios de migración correcta para claves externas son los mismos que para índices.

PostgreSQL extrae datos de claves foráneas de la tabla de servicio «information_schema» usando la consulta:

SELECCIONE

tc.constraint_name, tc.table_name, kcu.column_name,

ccu.table_name AS nombre_tabla_extranjero,

ccu.column_name AS nombre_columna_extranjero

DESDE

information_schema.table_constraints AS tc

ÚNETE a information_schema.key_column_usage AS kcu

ON tc.constraint_name = kcu.constraint_name

ÚNETE a information_schema.constraint_column_usage AS ccu

ON ccu.constraint_name = tc.constraint_name

DONDE constraint_type = ‘CLAVE EXTRANJERA’ Y tc.table_name = ‘table_name’;

  • MySQL permite extraer datos de claves foráneas usando una de estas opciones:
  • Vía declaración SQL SHOW CREATE TABLE `nombre de tabla`

En phpMyAdmin, resalte la tabla en el panel izquierdo, vaya a la pestaña ‘Estructura’ y haga clic en el enlace ‘Vista de relaciones’ debajo de la definición de la tabla

Puntos de vista

La validación de las vistas migradas requiere comparar la instrucción SELECT de cada vista en PostgreSQL y MySQL teniendo en cuenta las diferencias entre los dialectos SQL de estos dos DBMS.

PostgreSQL expone una lista de todas las vistas en la base de datos usando la consulta:

SELECCIONAR nombre_tabla DE INFORMACIÓN_SCHEMA.vistas;

MySQL puede hacer lo mismo mediante la consulta:

MOSTRAR TABLAS COMPLETAS EN database_name DONDE TABLE_TYPE LIKE ‘VIEW’;

La sintaxis de las consultas en PostgreSQL y MySQL es similar, pero no igual. PostgreSQL usa comillas dobles para identificadores delimitados, mientras que MySQL usa ticks inversos para el mismo propósito.

  • Además, es necesario convertir las funciones y operadores de PostgreSQL que faltan en MySQL en equivalentes adecuados:
  • Operador de concatenación de cadenas || debe ser reemplazado por la función CONCAT de MySQL
  • Todos los operadores de conversión de PostgreSQL como $ 1 :: int deben convertirse en llamadas MySQL CAST ($ 1 AS $ tipo)
La función TO_CHAR de PostgreSQL ($ fecha, $ formato) debe ser reemplazada por el equivalente de MySQL DATE_FORMAT ($ fecha, $ formato). Los especificadores de formato se traducen de la siguiente manera: PostgreSQL MySQL
Descripción YYYY % Y
Año de 4 dígitos YY % y
Año de 2 dígitos Lun %segundo
Mes abreviado, por ejemplo, enero Mes %METRO
Nombre del mes, por ejemplo, enero, febrero MM %metro
Número de mes (1 – 12) HH o HH12 % h
Hora (1 – 12) HH24 % H
Hora (0-23) MI %yo
Minutos (0 – 59) SS % s
  • Segundos (0 – 59)
  • Todas las apariciones de CHR ($ a) deben reemplazarse por CHAR ($ a)

La función de PostgreSQL RANDOM () se convierte en MySQL RAND () Para garantizar una correcta migración de la base de datos, es razonable automatizar el proceso utilizando software dedicado como Convertidor de PostgreSQL a MySQL

ofrecido por Intelligent Converters.

Deja un comentario