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: [email protected]
> Subject: Re: [pgsql-es-ayuda] insertar registros e indice de una tabla
> From: [email protected]
> To: [email protected]
> 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 <[email protected]>
> -
> Enviado a la lista de correo pgsql-es-ayuda ([email protected])
> Para cambiar tu suscripci�n:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda
                                          

Responder a