From: | Horacio Miranda <hmiranda(at)gmail(dot)com> |
---|---|
To: | Ruben Fitó <r(dot)fito(at)ubiquat(dot)com>, Eduardo Morras <emorrasg(at)yahoo(dot)es> |
Cc: | "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Re: [pgsql-es-ayuda] Fila no encontrada después de un INSERT |
Date: | 2016-05-19 10:37:44 |
Message-ID: | 20eb581b-ea6f-d689-89c0-7d5be41ffddf@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Entendí tu pregunta.
Creo que no me entendiste la respuesta.
Postgresql no es como Oracle ( Oracle soporta basicamente dos tipos de
modos transaccionales ), postgresql 4 ( de lo que recuerdo ).
En los links que te envie. una persona tiene un problema similar al que
tu tienes.
Puedes revisar lo que envie por favor.
revisa si tienes esta opcion por favor.
transaction_deferrable = on.
Lo pregunto por que me tinca que alguien cambio algunas cosas para que
la base de datos sea más rápida ( pero eso te genera otro otros
problemas de consistencia ).
Ahora si estas usando pool, revisa que estes realmente conectado al
master y no al esclavo, ( de hecho yo probaría con el esclavo abajo ).
Algo esta mostrando datos sucios ( dirty read ).
Lo otro que puede estar afectando es que un componente este conectado al
pool y el otro a la base de datos de forma directa, ( imagino que el
pool tiene algun delay para tener velocidad ) pero esto es pura conjetura.
On 19/05/2016 10:16 PM, Ruben Fitó wrote:
> jajajaj, como siempre me explico fatal.
>
> Expongo un mini esquema del pipeline:
>
> *BACKEND WEB (JAVA-JDBC)
> * *Aplicación en C* *Anotaciones*
> Tiene varias conexiones permanentes
>
> Inicia un bloque transaccional con BEGIN
>
> Inicia una petición SOAP
>
>
> Inicia proceso de la petición del backend
>
> Abre una nueva conexión con la base de datos Libreia libpq
>
> Hace un INSERT sin (BEGIN). Pqexec() + Pqclear() Hemos comprobado que
> la fila se inserta. Por lo tanto el autocommit hace su función. Lo que
> no sabemos es si es instantáneo.
>
> La base de datos le devuelve el valor del ID de la fila. El ID es un
> serial.
>
> Cierra la conexión con la base de datos.
>
> Devuelve el ID al backend
> Con el ID hace una busqueda en la misma tabla
> Postgres responde que no encuentra la fila
>
> Si incluimos un sleep(1) antes de ejecutar la query
> SI que la encuentra. Vaya añadimos un lag de un segundo.
>
>
> Como pueden ver son conexiones diferentes, bloques transaccionales
> diferentes, programas diferentes.
> Por lo tanto cuando el backend hace la consulta debería encontrar la fila.
> Hemos intentado simular este mismo pipeline manualmente desde
> psql/scripts y no hemos podido reproducir esta situación.
>
> Podría incluir que el backend hace un rollback si NO encuentra la fila y
> un commit si la encuentra, pero creo que esto es irrelevante para este caso.
>
> Espero se entienda. jejeje
>
>
> Un fuerte saludo
>
>
>
>
>
>
> 2016-05-19 10:35 GMT+02:00 Eduardo Morras <emorrasg(at)yahoo(dot)es
> <mailto:emorrasg(at)yahoo(dot)es>>:
>
> Resumiendo si lo he entendido bien:
>
> Transaccion A
>
> BEGIN
> BEGIN
> INSERT
> AUTOCOMMIT
> BEGIN
> INSERT
> AUTOCOMMIT
> BEGIN
> INSERT
> AUTOCOMMIT
> ....
> No hay COMMIT para el BEGIN inicial
>
> Al hacer un SELECT no puedes leer los datos guardados ya que no han
> sido realmente guardados.
>
> Que es lo que quieres hacer? Que permanezcan los datos en la BD? Haz
> el COMMIT final. Que no permanezca pero poder consultarlos? Define
> la tabla para que pueda ser leida por readers y haz un ROLLBACK al
> final, si no son muchos datos es mas rapido que crear una tabla
> temporal y hacerle un drop posterior.
>
>
>
>
>
> --
> *Ruben Fitó *
> Software Engineer
> Ubiquat Technologies, SL
> r(dot)fito(at)ubiquat(dot)com <mailto:j(dot)catarineu(at)ubiquat(dot)com>
> www.ubiquat.com <http://www.ubiquat.com/>
>
> Tota la informació continguda en aquest document i arxius adjunts és
> CONFIDENCIAL protegida per llei de secret comercial. Si l'ha rebut per
> error, si us plau elimini'l i posi's en contacte amb l'emissor.
>
> All information contained in this document and any attachments are
> CONFIDENTIAL and protected under trade secret laws. If you receive this
> message by mistake, please delete it and notify it immediately to the
> sender.
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
From | Date | Subject | |
---|---|---|---|
Next Message | Ruben Fitó | 2016-05-19 11:33:10 | Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Fila no encontrada después de un INSERT |
Previous Message | Ruben Fitó | 2016-05-19 10:16:45 | Re: [pgsql-es-ayuda] Fila no encontrada después de un INSERT |