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)
--
TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?
               http://archives.postgresql.org/pgsql-es-ayuda

Responder a