From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Luis D(dot) García <ldgarc(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Carga de Datos en base a COPY/INSERTS |
Date: | 2008-07-30 19:25:31 |
Message-ID: | 20080730192531.GD3977@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Luis D. García escribió:
> Lo que se me ocurrió utilizar para esto son tablas auxiliares que sean
> copias de las originales, pero que no posean restricciones de claves
> primarias. En estas tablas auxiliares se hace la carga de los datos de los
> CSV por medio de un COPY y se extraen luego por medio del pg_dump (con la
> opciones -d -a para la extracción únicamente de los datos y en base a
> inserts). Luego por medio del mecanismo "sed" se cambian los nombres de las
> tablas en el archivo resultante del dump, de manera que los INSERTs se hagan
> en las tablas originales.
>
> Ahora, existe una manera más efectiva de llevar a cabo este procedimiento?
Claro, puedes hacer algo como
begin;
lock table tabla_principal;
insert into tabla_principal
select * from tabla_temporal where not exists (registro en tabla_principal)
commit;
El LOCK TABLE es necesario para el caso en que un registro se inserte en
la tabla principal mientras este proceso esta funcionando.
--
Alvaro Herrera http://www.PlanetPostgreSQL.org/
"Endurecerse, pero jamás perder la ternura" (E. Guevara)
From | Date | Subject | |
---|---|---|---|
Next Message | Luis D. García | 2008-07-30 19:48:07 | Re: Carga de Datos en base a COPY/INSERTS |
Previous Message | Luis D. García | 2008-07-30 19:16:47 | Carga de Datos en base a COPY/INSERTS |