He estado mirando pgloader pero no parece diseñado para lo que yo necesito si no para importar ficheros csv o bueno otros flat files configurables, al caso supongo que aunque exportase mis tablas (que es donde los triggers crean la informacion) a un formato que el gustase tendria que crear savepoints si quiero permitir algun fallback igual que ya hago yo. Es un poquillo irritante que no sea pueda modificar este parametro en postgresql :\

Alvaro Herrera escribió:
Linos escribió:

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?

No.  Todos los errores dejan la transaccion en estado "abortado", del
cual solo puedes salir abortandola completamente o bien con ROLLBACK TO
savepoint.

(Efectivamente lo que el codigo hace es un "rollback automatico"
internamente)

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.

Si el problema es la cantidad extra de ordenes que tienes que enviar
desde el cliente, creo que seria una ganancia enorme hacerlo en una
funcion del lado del servidor, usando bloques EXCEPTION.  Ahora, tienes
que tener en cuenta que EXCEPTION crea un nuevo savepoint cada vez, asi
que si la ralentizacion viene por el lado de crear los savepoints (lo
cual no seria raro, porque los savepoints son relativamente lentos)
entonces va a seguir siendo un cuello de botella.

Lo otro que podrias hacer, quizas, es intentar con PGLoader.


--
TIP 7: no olvides aumentar la configuración del "free space map"

Responder a