From: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> |
---|---|
To: | Jaime Casanova <jaime(dot)casanova(at)2ndquadrant(dot)com> |
Cc: | MKHotmail <mcanchas(at)hotmail(dot)com>, POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Correlativo de números. |
Date: | 2018-11-27 16:05:29 |
Message-ID: | 20181127160529.fzaqu7pr6t6gbgu4@alvherre.pgsql |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Jaime Casanova escribió:
> On Mon, 26 Nov 2018 at 10:34, Micky Khan <mcanchas(at)hotmail(dot)com> wrote:
> >
> > Ahora me piden que lo haga de otra manera.
> > Que el numero ya salga cuando le doy nuevo y si no lo grabo quede libre para el o los siguientes,
> > teniendo en cuenta que mas de un usuario va a accesar a esta tabla .
> >
>
> Como bien explico Francisco, si va a haber concurrencia es
> practicamente imposible a menos que los des en desorden y eso tampoco
> será fácil de implementar y puede ser muy lento.
>
> Una sugerencia, si es una petición de un usuario... ignoralo. los
> usuarios rara vez saben lo que quieren y nunca debes basar el diseño
> del sistema en peticiones aleatorias de los usuarios. eso lleva a
> complicar las cosas inutilmente
Lo que Jaime dijo.
Almacena el número en una tabla, y cada vez que necesites asignar uno,
usa un lock que prevenga que nadie más trabaje con esa tabla hasta que
la otra transacción haya concluido. (Obviamente ese lock no tiene que
bloquear nada más, sólo la generación del número). Alternativamente,
puedes usar pg_advisory_xact_lock().
https://www.postgresql.org/docs/10/explicit-locking.html#ADVISORY-LOCKS
https://www.postgresql.org/docs/10/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From | Date | Subject | |
---|---|---|---|
Next Message | Carlos Perez | 2018-11-29 14:16:52 | formatear numero desde postgres para un listado |
Previous Message | Jaime Casanova | 2018-11-27 15:53:04 | Re: Correlativo de números. |