Re: Re: Fila no encontrada después de un INSERT

From: Horacio Miranda <hmiranda(at)gmail(dot)com>
To: Ruben Fitó <r(dot)fito(at)ubiquat(dot)com>, "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Re: Fila no encontrada después de un INSERT
Date: 2016-05-19 08:44:01
Message-ID: 72e1d210-b1c0-4463-726e-1fed6069952f@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Estan en una transaccion ?

Si no hacen commit es normal que la fila no sea leida.

On 19/05/2016 6:57 PM, Ruben Fitó wrote:
> Me olvidaba de una cosa.
>
> La base de datos tiene el Sistema de replicación "Streaming
> Replication", pero no creemos que influya, ya que tanto el aplicativo
> como el backend de la WEB se conectan al master.
>
> Un saludo
>
> 2016-05-19 8:54 GMT+02:00 Ruben Fitó <r(dot)fito(at)ubiquat(dot)com
> <mailto:r(dot)fito(at)ubiquat(dot)com>>:
>
> Hola Lista,
>
> Un día mas les vengo con una duda referente a Postgresql. Qué haría
> sin ustedes...
>
> Estamos sufriendo una situación un tanto rara. Tenemos una WEB
> interna que comunica con un aplicativo son SOAP, y con la base de
> datos con JDBC.
>
> El pipeline para una funcionalidad en concreto que estamos siguiendo
> es el siguiente:
>
> 1. El backend de la WEB debe realizar una tarea iniciada por el
> usuario.
> 2. Lo primero que hace es iniciar un bloque transaccional con la
> base de datos haciendo un simple "BEGIN" (nada mas).
> 3. Conecta con el aplicativo para que procese unos datos.
> 4. El aplicativo acaba realizando un INSERT con Autocommit a una
> tabla devolviendo el id del INSERT con un RETURNING. El id es un
> serial.
> 5. Después, el aplicativo devuelve el id al backend de la WEB.
> 6. El backend ha de finalizar su trabajo realizando una consulta a
> la misma tabla que el aplicativa ha hecho el INSERT utilizando
> el id que ha recibido en la respuesta.
> 7. Sorprendente-mente el Backend WEB no encuentra la fila insertada
> con el id recibido del aplicativo.
>
> Para poder solucionarlo "temporalmente" hemos tenido que incluir un
> sleep de un segundo en el backend para que la fila sea encontrada.
>
> A tener en cuenta:
>
> * La WEB utiliza un POOL de conexiones que va utilizando según
> trabaja.
> * El aplicativo (en C + libpq) realiza una nueva conexión cada vez
> que recibe una petición del backend de la WEB y las querys se
> realizan con autocommit.
> * El tiempo transcurrido entre el INSERT del aplicativo y de la
> consulta del backend es de aproximadamente 100 milisegundos como
> máximo.
> * No hay triggers en la tabla que se ha hecho el INSERT.
> * Hemos simulado la operativa manualmente (consola + scripts ) y
> no hemos podido reproducir el mismo fallo.
> * Los logs de POSTGRES no nos detallan el problema.
>
>
> No hemos podido encontrar el motivo de este hecho.
>
> Nos podemos figurar varias situaciones:
>
> * Postgres devuelve el resultado del INSERT sin que se haya
> guardado físicamente en el disco. Esta teoría sólo tiene sentido
> cuando hemos dicho que el BACKEND de la WEB ha iniciado el
> bloque transaccional antes de que el aplicativo abriera una
> nueva conexión y ejecutara el INSERT.
> * Postgres debe de almacenar las querys en alguna caché no
> compartida ante de guardar al disco.
> * El sistema operativo tiene varias capas de almacenamiento y
> buffers que tardan en hacer efecte.
> * Configuración de shared memory.
> * Etc..
>
> Estamos teorizando y probablemente todo sean conjeturas sin sentido,
> perdón por si he dicho alguna tontería que les hace sangrar los
> ojos, jejeje.
>
> Pues eso, entendiendo que Postgres garantiza la integridad de datos,
> hemos partido de la premisa que si obtenemos el id de la fila
> INSERTADA es que postgres ha finalizado su trabajo correctamente y
> se garantiza que la fila está INSERTADA.
>
> Perdonen por el largo texto, pero no se explicarme mejor.
>
> Un saludo y gracias de antemano
>
>
>
>
> --
> *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.
>
>
>
>
> --
> *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

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ruben Fitó 2016-05-19 08:58:51 Re: [pgsql-es-ayuda] Re: Fila no encontrada después de un INSERT
Previous Message Eduardo Morras 2016-05-19 08:35:01 Re: Fila no encontrada después de un INSERT