Hola, hace poco que migre a Postgresql y encuentro el tema de las transacciones que hacen un rollback automatico (o como si lo hicieran porque al fin y al cabo el resto de cambios devuelven un error) un poco lioso, yo realizo una serie de updates sobre una tabla por una linea lenta, supongamos 20000 registros, quiero hacerlos todos o ninguno, pero si el registro existe en la tabla remota detecto el error y como fallback lanzo un update, el problema es que ahora con Postgresql mis inserts son tal que asi.

begin ----- savepoint ---- insert ---- releasesavepoint ---- savepoint ---- insert ----- releasesavepoint ---- savepoint --- insert(error) --- rollback to savepoint --- update --- releasesavepoint --- 20000 registros mas ---- commit

Lo cual a traves de una linea lenta ralentiza considerablemente. Supongo que debe haber alguna manera mejor de hacer esto que evidentemente yo no conozco, se puede desactivar este modo para que la transaccion siga con un error hasta que yo haga un rollback especifico? otra manera que habia pensado es hacer una funcion para los inserts (q cambiara a update si existe el registro) pero las columnas cambian no solamente para cada tabla si no a veces en cada insert, se generan con unos triggers automaticamente y no se si se podria hacer o incluso si interesaria hacerlo. Me podrian echar un cable con esto? gracias.

Un saludo,
Miguel Angel.
--
TIP 8: explain analyze es tu amigo

Responder a