CodeGym /Cursos /SQL SELF /Errores típicos al hacer carga masiva de datos

Errores típicos al hacer carga masiva de datos

SQL SELF
Nivel 24 , Lección 4
Disponible

La carga masiva de datos en PostgreSQL es como jugar al tetris: todas las piezas (los datos) tienen que encajar perfectamente en la tabla existente (la estructura de la base de datos). Pero, igual que en los juegos, a menudo aparecen errores que pueden ralentizar el proceso o incluso hacer que todo se caiga. Te puedes topar con problemas de incompatibilidad de tipos de datos, codificaciones, registros duplicados, y a veces hasta errores inesperados de permisos.

¿Qué errores suelen aparecer, cómo detectarlos y cómo evitarlos? Hoy vamos a ver en detalle los problemas más frecuentes para que te conviertas en un auténtico crack de la carga masiva de datos.

Errores de incompatibilidad de estructura de datos

Problemas con los tipos de datos

Muy a menudo, al cargar datos puedes ver un error como este:

ERROR:  sintaxis de entrada no válida para tipo integer: "abc"
CONTEXT:  COPY estudiantes, línea 3, columna edad: "abc"

Esto pasa si los datos en tu archivo CSV no coinciden con el tipo esperado de la columna. Por ejemplo, si en la columna edad se espera un número, pero en los datos hay una cadena "abc". PostgreSQL no sabe cómo convertir texto a número y el proceso de carga se detiene.

¿Cómo evitarlo?

  1. Revisa tu archivo CSV antes de cargarlo. Si trabajas con Excel o Python, asegúrate de que todas las columnas coincidan con los tipos esperados.
  2. Si aún así aparecen errores, puedes intentar cargar los datos primero en una tabla intermedia donde todas las columnas sean de tipo TEXT, y luego hacer la conversión:
UPDATE temp_estudiantes
SET edad = CAST(edad AS INTEGER)
WHERE edad ~ '^\d+$';

Columnas faltantes

Si la estructura de la tabla no coincide con los datos del archivo CSV, PostgreSQL te va a dar un error. Por ejemplo:

ERROR:  faltan datos para la columna "correo"
CONTEXT:  COPY estudiantes, línea 2: "John,Doe,21"

Esto suele pasar si los encabezados (o el orden de las columnas) en el archivo CSV son diferentes a la estructura de la tabla.

¿Cómo evitarlo? Cuando uses el comando COPY, pasa siempre la lista de columnas que quieres rellenar:

COPY estudiantes (nombre, apellido, edad)
FROM '/ruta/al/archivo.csv' 
DELIMITER ',' 
CSV HEADER;

Errores de codificación

Problemas con diferentes codificaciones

Si tu archivo CSV fue guardado en una codificación distinta a UTF-8 (por ejemplo, Windows-1251), PostgreSQL puede no entender tu archivo. Esto genera errores, sobre todo si hay caracteres cirílicos en los datos:

ERROR:  secuencia de bytes no válida para la codificación "UTF8": 0xd0
CONTEXT:  COPY estudiantes, línea 1

¿Cómo evitarlo?

  1. Asegúrate de que tu archivo CSV esté guardado en UTF-8.
  2. Si no es posible, especifica la codificación del archivo al cargarlo:
COPY estudiantes FROM '/ruta/al/archivo.csv'
DELIMITER ',' 
CSV HEADER 
ENCODING 'WIN1251';

Errores de acceso al archivo

Problemas con los permisos de acceso

Si usas el comando COPY, PostgreSQL tiene que tener acceso al archivo que vas a cargar. Si el archivo no está disponible, verás un error como este:

ERROR:  no se pudo abrir el archivo "/ruta/al/archivo.csv" para leer: Permiso denegado

O incluso:

ERROR:  no existe el archivo o directorio

¿Cómo evitarlo?

  1. Asegúrate de que PostgreSQL tenga acceso al archivo. En Linux esto puede estar relacionado con los permisos. Usa el comando chmod para dar acceso:
    chmod 644 /ruta/al/archivo.csv
    
  2. Si trabajas desde tu ordenador local, usa el comando \COPY en vez de COPY.

Problemas con datos duplicados

Al cargar datos en tablas con restricción UNIQUE (por ejemplo, identificadores únicos), puedes encontrarte con conflictos:

ERROR:  valor de clave duplicada viola la restricción única "estudiantes_pkey"
DETAIL:  Clave (id)=(1) ya existe.

Esto pasa si en el archivo CSV hay registros duplicados o los datos ya existen en la tabla.

¿Cómo evitarlo?

  1. Usa la opción ON CONFLICT para manejar los valores duplicados:
    INSERT INTO estudiantes (id, nombre, apellido)
    VALUES (1, 'John', 'Doe')
    ON CONFLICT (id) DO NOTHING;
    
  1. Si usas COPY o \COPY, carga los datos primero en una tabla intermedia y luego pásalos a la principal gestionando los duplicados.

Errores de valores vacíos

En PostgreSQL, las columnas con restricción NOT NULL no permiten valores vacíos. Si en tu archivo CSV hay columnas vacías, puedes ver un error como este:

ERROR:  valor nulo en la columna "correo" viola la restricción not-null

¿Cómo evitarlo?

  1. Asegúrate de que el archivo CSV tenga valores para todas las columnas obligatorias.
  2. Si los valores vacíos son aceptables, elimina la restricción NOT NULL o usa un valor por defecto:
ALTER TABLE estudiantes ALTER COLUMN correo SET DEFAULT 'desconocido@example.com';

Errores en el registro de logs

Falta de información sobre errores

Si cargas archivos grandes, es importante guardar información sobre los errores. Por desgracia, el comando COPY por defecto no tiene mecanismos para logging.

¿Cómo evitarlo? Configura el registro de errores usando una tabla aparte. Por ejemplo, crea una tabla para errores y redirige ahí los registros incorrectos:

COPY estudiantes FROM '/ruta/al/archivo.csv'
DELIMITER ',' 
CSV HEADER
LOG ERRORS INTO registro_errores
REJECT LIMIT 100;

Resumen para evitar errores

  1. Analiza y revisa siempre los datos antes de cargarlos.
  2. Usa tablas temporales para procesar los datos antes.
  3. Activa el logging de errores y revísalos.
  4. En caso de conflicto o incompatibilidades, usa ON CONFLICT o carga en tablas intermedias.
  5. Revisa la codificación de los archivos y configura los parámetros del servidor.

La carga masiva de datos puede ser una tarea complicada, pero con el enfoque correcto puedes hacer que el proceso sea rápido, fiable y eficiente. ¿Quieres poner a prueba tus nuevas skills? Intenta cargar un archivo CSV grande en una base de datos de pruebas y comprueba que todos los datos se cargaron bien.

1
Cuestionario/control
Optimización de carga masiva, nivel 24, lección 4
No disponible
Optimización de carga masiva
Optimización de carga masiva
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION