Fwd: Importar fichero CSV

From: Nicola Strappazzon <nicola51980(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Fwd: Importar fichero CSV
Date: 2007-04-03 16:52:10
Message-ID: FE3E7010-D812-4A7F-AA1B-B7EA1135D4E4@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Tengo la solucion de como importar archivos, aqui te pongo el query.

-- script_migrar_datospersonales.sql

BEGIN;
SET client_encoding TO LATIN1;

/*
PASO 1:
=======
Creamos una tabla temporal para alojar los datos del archivo
y poder normalizarlos de una forma para que puedan migrarse.
------------------------------------------------------------
*/
CREATE TEMPORARY TABLE tbl_tmp_RecordsAcademicos
(
Columna_0 SERIAL NOT NULL, -- Serial.
Columna_1 INT8, -- C.I.
Columna_2 VARCHAR(3), -- Nacionalidad
Columna_3 VARCHAR(45), -- Primer Apellido
Columna_4 VARCHAR(45), -- Segundo Apellido
Columna_5 VARCHAR(45), -- Primer Nombre
Columna_6 VARCHAR(45), -- Segundo Nombre
Columna_7 VARCHAR(255), -- Direccion
Columna_8 VARCHAR(12), -- Telefono
Columna_9 VARCHAR(3), -- Genero
Columna_10 VARCHAR(10), -- FN
CONSTRAINT Columna_0 PRIMARY KEY (Columna_0)
) ON COMMIT DROP;

/*
PASO 2:
=======
Lemos el archivo a migrar y lo introducimos a la tabla temporal.
----------------------------------------------------------------
*/
COPY tbl_tmp_RecordsAcademicos(Columna_1,
Columna_2,
Columna_3,
Columna_4,
Columna_5,
Columna_6,
Columna_7,
Columna_8,
Columna_9,
Columna_10)
FROM '/home/usuario/DP.txt'
DELIMITER AS ',';

SELECT * FROM tbl_tmp_RecordsAcademicos;
END;

Te explico que es lo que hace el query:
1. creamos una tabla temporal que se borra al finalizar al hacer
commit, eso pasa cuando llega al END;
2. la tabla temporal debe tener todos los campos que tiene el archivo
y el tipo de dato que esta dentro de el, esta parte es la que hay q
modificar para adaptarlo al archivo.
3. Despues utilizamos la sentencia COPY para leer los datos del
archivo en una ubicacion en especifico 'home/usuario/DP.txt' en el
servidor, especificamos un delimitador ',' y tambien las columnas de
la tabla temporal donde pondremos las columnas del archivo.
4. por ultimo te puse un select para que vieras los datos insertados
dentro de la tabla.

Como lo usas? Simple, lo tienes q poner dentro de un archivo .sql, y
lo ejecutas por sonsola:

psql -h localhost -U postgres -d MiBasesDeDatos -f
script_migrar_datospersonales.sql

P.D.
Espero que sea util la ayuda, suerte!.

Begin forwarded message:

> From: Javier Estévez CIFA Córdoba
> <javier(dot)estevez(dot)ext(at)juntadeandalucia(dot)es>
> Date: April 2, 2007 3:08:54 AM GMT-04:00
> To: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>, "Mario Gonzalez"
> <gonzalemario(at)gmail(dot)com>
> Cc: "Javier Carlos" <javier(at)nediam(dot)com(dot)mx>, <pgsql-es-
> ayuda(at)postgresql(dot)org>
> Subject: Re: [pgsql-es-ayuda] Importar fichero CSV
>
> Es fácil saberlo pues en mi archivo .DAT (estructura CSV), las
> líneas con
> más columnas el valor de la primera columna siempre es 201 y las
> líneas con
> el mismo número de columnas el primer valor es 222.
> Mi archivo es algo así:
>
> 222,75,1230,1,2,3,4,5,6,7,8,9
> 222,75,1300,1,2,3,4,5,6,7,8,9
> 222,75,1330,1,2,3,4,5,6,7,8,9
> 201,75,2400,1,2,3,4,5,6,7,8,9,10,11,12
> 222,76,1230,1,2,3,4,5,6,7,8,9
> 222,76,1300,1,2,3,4,5,6,7,8,9
>
>
> ...
>
> ----- Original Message -----
> From: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>
> To: "Mario Gonzalez" <gonzalemario(at)gmail(dot)com>
> Cc: "Javier Carlos" <javier(at)nediam(dot)com(dot)mx>; "Javier Estévez CIFA
> Córdoba"
> <javier(dot)estevez(dot)ext(at)juntadeandalucia(dot)es>; <pgsql-es-
> ayuda(at)postgresql(dot)org>
> Sent: Friday, March 30, 2007 4:39 PM
> Subject: Re: [pgsql-es-ayuda] Importar fichero CSV
>
>
> Mario Gonzalez escribió:
>> On 30/03/07, Alvaro Herrera <alvherre(at)commandprompt(dot)com> wrote:
>>>
>>> Lo que yo haria seria un programa en shell (quizas en awk? o en
>>> perl)
>>> que divida el archivo y arroje las lineas a dos archivos
>>> separados, y
>>> luego haria COPY de los dos archivos de salida.
>>
>> Usando el mismo archivo CSV que mostre de ejemplo, algo en shell
>> como lo que dice Alvaro:
>>
>> mario(at)mario:~$ cut -d , -f1,2 archivo_csv
>> 1,2
>> 4,5
>> 7,8
>>
>> mario(at)mario:~$ cut -d , -f3 archivo_csv
>> 3
>> 6
>> 9
>
> No no, entiendo que el problema es que el OP tiene un archivo que es
> algo asi:
>
> 1,2,3
> 4,5,6
> 7,8,9,10,11
> 2,3,4
> 3,4,5
> 3,4,5,6,7
>
> Entonces el asunto es que hay que poner las lineas 1, 2, 4 y 5 en una
> tabla, y las lineas 3 y 6 en otra. El problema es saber cuales lineas
> tienen 3 columas y cuales tienen 5. Puntos extra si recorres el
> archivo
> completo solo una vez.
>
> --
> Alvaro Herrera http://
> www.CommandPrompt.com/
> PostgreSQL Replication, Consulting, Custom Development, 24x7 support
>
>
> ---------------------------(fin del
> mensaje)---------------------------
> TIP 7: no olvides aumentar la configuración del "free space map"

Nicola Strappazzon
nicola51980(at)gmail(dot)com

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Sebastian Alejandro Saez Garcia 2007-04-03 16:55:47 Re: Busqueda de coordenadas en caja 3D Postgis
Previous Message Nicola Strappazzon 2007-04-03 16:51:13 Cómo se puede saber la fecha de la ultima modificacion de la BD?