RE: insertar registros e indice de una tabla

From: José Fermín Francisco Ferreras <josefermin54(at)hotmail(dot)com>
To: <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: Lista PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: insertar registros e indice de una tabla
Date: 2011-03-25 12:45:38
Message-ID: COL103-W48AFF4AB1B3E8091D5556CC6B90@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Gracias a todos por sus aportes y en especial a Alvaro Herrera, ya que gracias a ustedes he logrado insertar los dos millones de registros en tan solo 5 minutos y 15 segundos en promedio. Tengo una duda y es con el siguiente caso:

ERROR: missing data for column "estado"
CONTEXT: COPY tabla, line 1064232: "123456789|JOSE FERMIN FRANCISCO FERRERAS\||ADMINISTRACION DE BASE DE DATOS| | | | |21/04/2007|ACTIVO"

********** Error **********

ERROR: missing data for column "estado"
SQL state: 22P04
Context: COPY tabla, line 1064232: "123456789|JOSE FERMIN FRANCISCO FERRERAS\||ADMINISTRACION DE BASE DE DATOS| | | | |21/04/2007|ACTIVO"

Como podemos ver, los campos se demilitan por el caracter "|", pero al juntarse los caracteres \| ocurre el error que vemos acá.

Cómo se podrá evitar que se ocurra el error sin tener que editar el archivo manualmente antes de de ejecutar el COPY.

Nota: este es el COPY que utilizé

COPY tabla FROM e'C:\\carpeta\\archivos\\archivo1.TXT'
DELIMITER '|';

ing. José Fermín Francisco Ferreras
San Francisco de Macorís, Rep. Dom.

> CC: pgsql-es-ayuda(at)postgresql(dot)org
> Subject: Re: [pgsql-es-ayuda] insertar registros e indice de una tabla
> From: alvherre(at)alvh(dot)no-ip(dot)org
> To: josefermin54(at)hotmail(dot)com
> Date: Wed, 23 Mar 2011 18:18:08 -0300
>
> Excerpts from josefermin54's message of mié mar 23 14:53:41 -0300 2011:
> >
> > Buenas tardes amigos, mi pregunta de hoy es acerca de una tabla a la que se van a insertar 2 millones de registros provenientes de un archivo de texto, ahora bien en esa tabla se creo un indice para hacer las búsquedas más ágiles, pero, antes de crear el índice la insercción de registros se hacía con una muy rapidez buena (en una hora se insertaron 600 mil registros y ahora con el índice en una hora sólo se pudieron insertar 23 mil registros). Mi pregunta es tiene que ver algo el índice creado con la rapidez de insercción. Y si existe de alguna forma de poder insertar registros con más rapidez desde un archivo de texto.
> > Sistema operativo utilizado: Windows 7Postgresql 8.4Método utilizado: btreecampo al que se le creó índice: codigocantidad de índices en la tabla: 1En el momento último de insercción de registros solo estaba utilizando: pgadmin y el programa para insertar registros desde el archivo de texto.
>
> Algo anda profundamente mal con tu sistema. Acá hice una prueba rápida:
> primero creo un archivo de texto con un millón de líneas. Luego creo
> una tabla, sin índices, y le inserto con COPY las líneas desde el
> archivo. Se demora 8 segundos. Luego trunco la tabla, creo un índice,
> vuelvo a insertar el mismo millón de registros. Se demora 17 segundos.
>
> Esta es una máquina de escritorio que no tiene nada del otro mundo.
>
> $ seq 1 1000000 > /tmp/unmillon
> $ ls -l /tmp/unmillon
> -rw-r--r-- 1 alvherre alvherre 6888896 mar 23 17:52 /tmp/unmillon
>
> alvherre=# create table unmillon (a int);
> CREATE TABLE
> alvherre=# \timing
> El despliegue de duración está activado.
> alvherre=# copy unmillon from '/tmp/unmillon';
> COPY 1000000
> Duración: 8488,785 ms
> alvherre=# truncate table unmillon;
> TRUNCATE TABLE
> Duración: 54,189 ms
> alvherre=# create index f on unmillon (a);
> CREATE INDEX
> Duración: 141,347 ms
> alvherre=# copy unmillon from '/tmp/unmillon';
> COPY 1000000
> Duración: 17252,609 ms
>
> Repetí la inserción varias veces sin truncate para ver cómo cambiaban
> los tiempos, y se fueron haciendo progresivamente peores pero no mucho
> (como se espera):
>
> alvherre=# truncate table unmillon ;
> TRUNCATE TABLE
> Duración: 55,474 ms
> alvherre=# copy unmillon from '/tmp/unmillon';
> COPY 1000000
> Duración: 12552,902 ms
> alvherre=# commit;
> COMMIT
> Duración: 74,718 ms
> alvherre=# copy unmillon from '/tmp/unmillon';
> COPY 1000000
> Duración: 25170,691 ms
> alvherre=# copy unmillon from '/tmp/unmillon';
> COPY 1000000
> Duración: 21487,533 ms
> alvherre=# copy unmillon from '/tmp/unmillon';
> COPY 1000000
> Duración: 28824,152 ms
> alvherre=# copy unmillon from '/tmp/unmillon';
> COPY 1000000
> Duración: 30203,438 ms
> alvherre=# copy unmillon from '/tmp/unmillon';
> COPY 1000000
> Duración: 27992,940 ms
>
>
> --
> Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
> -
> Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
> Para cambiar tu suscripci�n:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gaston Rider 2011-03-25 13:54:04 FW: Cortar conexion a un usuario.
Previous Message edomax 2011-03-25 03:26:46 Re: insertar registros e indice de una tabla