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
