Contenido del curso

Importar CSV a PostgreSQL con COPY

Resumen

Importar datos desde Excel a PostgreSQL es una tarea común cuando trabajas con bases de datos heredadas. La clave está en convertir el archivo a formato CSV y usar la sentencia COPY dentro de pgAdmin para cargarlo en la tabla destino sin perder integridad.

Por qué exportar de Excel a CSV antes de cargar a Postgres

Muchas empresas todavía guardan sus bases en Excel, y al intentar moverlas a un entorno SQL aparece un problema natural de incompatibilidad. La solución es simple: exportar el archivo de Excel a un formato separado por comas, conocido como CSV, que sí puede leer Postgres directamente.

Una vez tienes el CSV con las mismas columnas que tu tabla destino, puedes importarlo sin mayores complicaciones. En el ejemplo de la clase [00:35], el archivo replica los campos de la tabla customer: customer_id, store_id, first_name, last_name, correo electrónico e ID de dirección.

¿Qué es un archivo CSV? Es un archivo de texto plano donde cada valor está separado por comas y cada fila representa un registro. Postgres lo lee de forma nativa con la sentencia COPY.

Cómo usar la sentencia COPY para importar datos

La sentencia COPY es el atajo oficial de Postgres para mover datos entre archivos y tablas. Su estructura básica indica la tabla destino, la ruta del archivo, el delimitador y el formato.

En la clase [01:30] se muestra la sintaxis aplicada a la tabla customer:

sql COPY customer(customer_id, store_id, first_name, last_name, email, address_id) FROM 'C:\data.csv' DELIMITER ',' CSV HEADER;

Algunos detalles importantes sobre cada parte:

  • La ruta debe apuntar al lugar real donde guardaste el archivo, por ejemplo C:\users\admin\documentos\data.csv.
  • El operador DELIMITER le dice a Postgres cómo separar los campos.
  • La cláusula CSV HEADER aclara el formato y que la primera fila contiene los nombres de columna.

Qué hacer cuando aparece el error de permisos del archivo

Al ejecutar COPY desde la ventana de consultas de pgAdmin [02:30], es común recibir un mensaje diciendo que no puede abrir o ubicar el archivo CSV. El mensaje no es muy explícito, pero el motivo real es de permisos: Postgres como servicio no siempre puede leer rutas locales del usuario.

Una salida sería crear un usuario con permisos específicos, pero hacerlo solo para una operación es complicado. La alternativa práctica es usar la herramienta PSQL Tool dentro de pgAdmin, que funciona como una terminal conectada a tu base.

Cómo importar el CSV desde la PSQL Tool de pgAdmin

La PSQL Tool es el icono que abre un workspace tipo terminal [03:20]. Una vez ingresas tu contraseña y seleccionas la base, puedes ejecutar una versión más corta de la sentencia.

sql \copy customer FROM 'C:\data.csv' DELIMITER ',' CSV HEADER;

Aquí no necesitas listar todos los campos porque la herramienta los infiere del header. Hay dos detalles que conviene revisar antes de presionar enter:

  1. Confirma que estás conectado a la base correcta. Si te aparece un error tipo customer does not exist, probablemente entraste a otra base distinta de dvdrental.
  2. Asegúrate de que los IDs del CSV no choquen con los existentes. Si la tabla ya tiene 600 registros, usa identificadores como 700 en adelante para evitar duplicados de clave primaria.

¿Cuál es la diferencia entre COPY y \copy? COPY lo ejecuta el servidor Postgres y necesita permisos sobre la ruta. \copy lo ejecuta el cliente desde tu máquina, así que evita el problema de permisos.

Cómo confirmar que la importación funcionó

Después de ejecutar la sentencia, el sistema responde con un mensaje del tipo COPY 5, indicando cuántas filas se cargaron [05:10]. Para verificarlo visualmente, regresa a la ventana de consultas de pgAdmin y corre:

sql SELECT * FROM customer;

Al presionar F5, la tabla pasa de 600 a 605 registros. Esa diferencia confirma que tu CSV se integró correctamente.

Diferencias entre la ventana de consultas y la PSQL Tool

La ventana de consultas de pgAdmin es más visual y cómoda: muestra resultados en formato de tabla y permite ejecutar SELECT * sin problema. La PSQL Tool, en cambio, tiene un comportamiento más estricto y replica el entorno de un script de terminal.

Un ejemplo claro aparece en [06:00]: dentro de la PSQL Tool, escribir SELECT * FROM customer; puede no devolver resultados visibles porque el operador asterisco no se renderiza igual. La solución es consultar campo por campo:

sql SELECT first_name FROM customer;

Esa diferencia te obliga a pensar tus consultas como instrucciones de script, lo cual es útil cuando vas a automatizar tareas o trabajar con bases en producción donde la terminal es la única vía.

¿Has intentado importar tus propios CSV a Postgres? Cuéntame en los comentarios qué errores te han aparecido y cómo los resolviste.