Re: leer de un txt a postgres

From: "Mariano Reingart" <mariano(at)nsis(dot)com(dot)ar>
To: "Espartano" <espartano(dot)mail(at)gmail(dot)com>
Cc: "Virginia" <mavir78(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: leer de un txt a postgres
Date: 2009-03-11 19:56:41
Message-ID: 48118.190.50.194.163.1236801401.squirrel@www.nsis.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

> 2009/3/11 Virginia <mavir78(at)gmail(dot)com>:
>> Buenas tardes a todos. Necesito que alguien me oriente en lo siguiente:
>> Tengo una tabla en postgresql que debe ser alimentada por datos
>> almacenados en dos archivos txt (uno.txt y dos.txt).
>> Debo leer cada linea de cada archivo para determinar, según las
>> longitudes, qué información va a qué campo.
>> Adicionalmente, hay varios campos que tienen al final un caracter
>> que
>> indica si este caracter debe ser sustituido por un signo negativo y un
>> número, por ejemplo 01245551Q ---> la Q vale -8, osea que tomando en
>> cuenta
>> las condiciones mencionadas y otras que no viene al caso explicar, el
>> valor
>> queda -124555.18.
>> Cabe destacar, que algunos campos de esta tabla se llenan con datos
>> provenientes del archivo uno.txt y otros campos de la misma tabla se
>> llenan
>> con los datos que provienen del archivo dos.txt.
>> Otro detalle es que esto debe ser una tarea programada en
>> postgresql
>> (PgAgent... sigo yo con el temita...) o en lo que sea, esto lo resuelvo
>> después.
>> Ahora bien, mi pregunta es la siguiente:
>> ¿Cómo hago para migrar esta información de ambos archivos a la tabla en
>> postgresql? teniendo en cuenta que hay que leer y "traducir" ciertos
>> valores. ¿Para esto me sirve el LOAD DATA? si alguien sabe cómo se hace
>> con
>> LOAD DATA, por favor, indíqueme un ejemplo porque en postgresql no
>> encuentro.
>>
>> Muchas gracias, espero que alguien pueda darme un ejemplo claro de
>> esto....
>> --
>> -----------------------------------------------------------
>> ------------------------ Virginia ------------------------
>> -----------------------------------------------------------
>>
>
> Lo mas facil segun yo seria hacer un script de php perl o algo por el
> estilo y hacer un cron con el para que lea los archivos cada x tiempo.
>

Si vas a usar un script, podes user Python con el lenguaje procedural
pl/pythonu y hacer las funciones dentro de postgres:

CREATE FUNCTION importar (archivo text)
RETURNS integer
AS $$

for linea in open(archivo,"r"):
plpy.execute("INSERT INTO tabla (campo1, campo2) VALUES ('%s','%s')" %
(linea[0:4], linea[5:6]))

$$ LANGUAGE plpythonu;

Para ejecutar, llamas a:

SELECT importar('uno.txt');

Este script va a abrir el archivo, y linea por linea ejecutar el INSERT,
recortando los campos de la linea.

También podrías devolver múltiples filas con yield, pero esto ya es un
poco más complejo.

No lo probé. pero seria mas o menos así, cualquier cosa avisame

Sds
Mariano

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message (Syswarp) Carlos Enrique Perez 2009-03-11 20:52:57 RE: leer de un txt a postgres
Previous Message Lennin Caro 2009-03-11 19:54:51 Re: leer de un txt a postgres