Re: [pgsql-es-ayuda] Efectuar copy desde un archivo con más columnas que la tabla

From: Daymel Bonne Solís <dbonne(at)uci(dot)cu>
To: Oswaldo <listas(at)soft-com(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: [pgsql-es-ayuda] Efectuar copy desde un archivo con más columnas que la tabla
Date: 2012-05-18 16:30:45
Message-ID: 4FB67935.7010408@uci.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 18/05/12 10:44, Oswaldo escribió:
> El 16/05/2012 23:16, Daymel Bonne Solís escribió:
>> El 16/05/12 17:09, Alvaro Herrera escribió:
>>> Excerpts from Daymel Bonne Solís's message of mié may 16 16:59:28
>>> -0400 2012:
>>>> El 16/05/12 16:33, Daymel Bonne Solís escribió:
>>>>> Lamentablemente es así. Creo que ahí se puede mejorar, porque es un
>>>>> escenario bastante común. Que opinan al respecto?
>>>> Revisando la documentación, encontré que lo dice claramente:
>>>>
>>>> " (...) COPY FROM will raise an error if any line of the input file
>>>> contains more or fewer columns than are expected. (...) ".
>>> ... lo cual no quiere decir que no pueda cambiarse. Pero si vas a
>>> proponer algo, tiene que ser algo útil en general. ¿Cuál era tu
>>> propuesta?
>>>
>> Mi propuesta es que el comando COPY ignore las columnas sobrantes del
>> fichero de entrada y no lance el error de columnas sobrantes.
>> No se si puedo ser más claro. :D
>>
>
> Y ¿cuales son las columnas sobrantes? ¿las ultimas?, ¿quizá las que
> sobren en otros casos sean las primeras?, ¿o estén intercaladas?
>
> También puede interesar filtrar las lineas, que el copy solo importe
> las que cumplen una o varias condiciones.
>
> Mi opinión es que copies el archivo entero a una tabla temporal y
> después ejecutes: "insert into latabla .... select ... from tabla
> temporal", ahi ya seleccionas columnas, puedes filtrar, etc. y
> haciéndolo todo en una unica transacción no debes tener problemas de
> velocidad.
>
Entiendo, una propuesta puede ser la siguiente:

COPY { nombre_de_tabla [ ( columna [, ...] ) ] | ( consulta ) }
FROM { 'nombre_de_archivo' | STDIN }
[ [ WITH ] ( opción [, ...] ) ]

donde opción puede ser una de:

SELECTED_BY_POSITION (integer, [,...]) |
SELECTED_BY_HEADER (columna [,...])

De esta forma podría quedar como:

COPY foo(columna1, columna2)
FROM '/ruta/al/archivo'
SELECTED_BY_POSITION (5, 4);

o de otra forma:

COPY foo(columna1, columna2)
FROM '/ruta/al/archivo'
HEADER true
SELECTED_BY_HEADER ('columna5', 'columna4');

Creo que así se resolverían muchos de los problemas que tenemos al
cargar archivos.

Saludos

10mo. ANIVERSARIO DE LA CREACION DE LA UNIVERSIDAD DE LAS CIENCIAS INFORMATICAS...
CONECTADOS AL FUTURO, CONECTADOS A LA REVOLUCION

http://www.uci.cu
http://www.facebook.com/universidad.uci
http://www.flickr.com/photos/universidad_uci

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Miguel Angel Hernandez Moreno 2012-05-18 21:22:05 problemas con serial
Previous Message Alejandro Carrillo 2012-05-18 16:06:08 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Efectuar copy desde un archivo con más columnas que la tabla