RE: Problema con Copy to delimiter

From: "Fernando Hevia" <fhevia(at)ip-tel(dot)com(dot)ar>
To: "'Fabian Sandoval'" <sql(at)transitofloridablanca(dot)gov(dot)co>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Problema con Copy to delimiter
Date: 2008-11-12 20:04:53
Message-ID: 47DEB8B6D6A94281A4179BB997979FCB@iptel.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Ups. Tienes toda la razón, es solo para importar. Te pido disculpas por mi
error.
Me siento en el compromiso de ofrecer una solución alternativa, aunque
rudimentaria.

Supongamos exportas tu tabla al siguiente archivo con el delimitador '|':

campo_1|campo_2|campo_3|campo_4
campo_a|campo_b|campo_c|campo_d

Ahora puedes convertir estas filas en posiciones fijas con un simple awk:

awk -F'|' '{ printf("%-10s%-6s%-20s%-10s\n", $1, $2, $3, $4) }' mi_tabla.txt
> mi_tabla_fija.txt

El resultado será un archivo con posiciones fijas:
$ cat mi_tabla_fija.txt
campo_1 campo_2campo_3 campo_4
campo_a campo_bcampo_c campo_d

En el printf del awk notarás que voy poniendo el ancho para cada columna en
orden secuencial. Si el ancho es negativo entonces indico que el valor se
alinee a izquierda, si el ancho es positivo obtendré alineación a derecha.
El ejemplo aplica para 4 campos ($1 a $4), pero puedes ir agregando columnas
metiendo dentro de las comillas del printf la secuencia s<ancho>% por
cada nueva columna, y al final de la coma un $<nro_campo> por cada campo
adicional.

Si sabes programar, es trivial el ejemplo. Si te cuesta comprenderlo,
escribime por privado con tu caso completo y te ayudo a adecuar el awk.
Si no tienes disponible un Unix también me ofrezco a procesar tu archivo.

Saludos,
Fernando.



_____

De: Fabian Sandoval [mailto:sql(at)transitofloridablanca(dot)gov(dot)co]
Enviado el: Miércoles, 12 de Noviembre de 2008 14:59
Para: Fernando Hevia; pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Problema con Copy to delimiter

Muchas gracias Fernando por el programa, le he estado mirando pero este es
para Importar , pasar de TXT a Postgres, pero lo que nesesito es lo
contrario que de la base de datos de Postgres a TXT, sin ningun delimitador
, por posicion y creo que este no me sirve, no se.
GRacias FErnando

2008/11/12 Fernando Hevia <fhevia(at)ip-tel(dot)com(dot)ar>

Fabian,

El comando copy no soporta la exportación a posiciones fijas. Si no le
especificás un delimitador fuerza un espacio.
Te recomiendo eches un vistazo a benetl (www.benetl.net
<http://www.benetl.net/> ) que es un ETL free para Postgres.

Saludos,
Fernando.

_____

De: pgsql-es-ayuda-owner(at)postgresql(dot)org
[mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Fabian Sandoval
Enviado el: Martes, 11 de Noviembre de 2008 17:22

Para: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: [pgsql-es-ayuda] Problema con Copy to delimiter

Hola amigos tengo un problema con la EXPORTACION de postgres a archivos de
texto plano. Pues me piden un archivo de texto plano sin delimitadores, pero
cuando exporto con la siguiente consulta

copy (select * from tranp OFFSET 500 limit 50000) to
'c:/import/tablita.dat'

voy y miro el resultado y postgres me pone espacios en blanco entre las
columnas , entonces intento con esta consulta

copy (select * from tranp OFFSET 500 limit 50000) to
'c:/import/tablita.dat' delimiter ''

para que simplemente no me ponga delimitadores, pero me da error que,
obligatoriamente tengo que poner un carácter entre las comillas simples de
delimiter.

No se que hacer, pues me piden un archivo de texto plano sin delimitadores y
sin espacios, osea un archivo de texto plano por posiciones.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message marcos negrini 2008-11-12 20:20:51 RE: Problema con Copy to delimiter
Previous Message Emanuel CALVO FRANCO 2008-11-12 20:03:59 Re: PG Day