viernes, 1 de abril de 2011

CSV a PostgreSQL

A todo el mundo le ha pasado que consigue una base de datos útil, pero que está en formato CSV y se necesita en PostgreSQL o MySQL. Justo me acaba de pasar y como no recordaba bien como hacerlo, consulté un poco en la red y decidí escribir este post a manera de recordatorio.

Pues nada, el caso es que estaba averiguando la cédula de alguien y lógicamente me fui al CNE, desde donde se puede descargar de forma libre la BD de electores por estado, en formato CSV. Me bastaba abrir el CSV y hacer una búsqueda con el nombre, pero como tenía un poco de tiempo libre, decidí crear mi propia BD para futuras búsquedas.

Es un proceso muy simple que se puede resumir en 2 pasos:

1. Crear la BD/Tabla

Lo primero que debemos tener es la base de datos y tabla en donde almacenaremos nuestros datos, con las columnas que contiene el archivo CSV. Podemos hacerlo gráficamente desde pgadmin o por código, como queramos.

Para este ejemplo, yo me descargué los datos de los electores de Mérida y creé una tabla electores_merida con la siguiente información:

CREATE table electores_merida (nacionalidad char(1), cedula character varying(16) NOT NULL, nombre character varying(128), centro character varying(256), fecha_nacimiento date);


2. Cargar la data

Para cargar la data desde el archivo CSV se utiliza el comando COPY:

COPY electores_merida from '/home/marco/csv/RE-CSV-12.csv' DELIMITERS ';' CSV;


Y eso es todo, muy sencillo. Ahora tenemos nuestra tabla electores_merida, que posteriormente podremos utilizar para consultas :)

Hay que tener presente que si se trata de un CSV bien formado, no tendrá encabezado, como máximo, tendrá en la primera línea el nombre de cada columna, y esto se puede especificar a postgres, de manera que omita la primera línea. Sin embargo, en este caso en particular, además de una línea de nombres de columnas, hay una línea de encabezado, fuera de formato. Lo que hice fue manualmente con un editor de texto borrarlas y listo.

6 comentarios:

Mijail dijo...

Hola, sabras de donde puedo sacar esa base de datos? ya el enlace no funciona!

pabloalrdz dijo...

Dejame felicitarte por tan util post, me estaba partiendo la cabeza para pasar información de un archivo csv a postgresql con decenas de millones de datos, en hora buena y sigue escribiendo, que yo te seguiré leyendo.

Felicidades!!!

Marco dijo...

Mijail, por la actualización que están haciendo el REP, van a tardar un poco en colocarlo disponible nuevamente.

pabloalrdz muchas gracias, es bueno saber que lo que uno escribe le es útil a otras personas

Gilberto Bahena dijo...

Hola, no he encontrado como decirle a postgres que omita las dos primeras (que tienen encabezados innecesarios) lineas de un CSV a importar. ¿Tu sabes como hacerlo?

Unknown dijo...

Hola muchas gracias por el post, me he encontrado con un inconveniente, al momento de ejecutar el comendo para reestablecer la data a la base desde el archivo csv me sale como que el comando se ha ejecutado correctamente pero al revisar la tabla se encuentra vacía, alguien sabe porque puede darse eso? Gracias.

Miguelon dijo...

Hola amigos y amigas.

Me pasa igual que a Carmen A. se ejecuta el script pero no sube los registros, en PostgreSql V10.

COPY fuente(id, pregunta, secuencia, correcta, describe) FROM 'C:\Program Files\PostgreSQL\10\bin\pregunta5.csv' WITH DELIMITER ';' CSV HEADER;

Query returned successfully in 116 msec.

Gracias por su atención y ayuda.