Re: modos de bloqueo

From: Kernel <jucabapa(at)gmail(dot)com>
To: "Ivan Perales M(dot)" <ivan(dot)perales(at)gmail(dot)com>, Jaime Casanova <jaime(dot)casanova(at)2ndquadrant(dot)com>
Cc: Hellmuth Vargas <hivs77(at)gmail(dot)com>, Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: modos de bloqueo
Date: 2016-04-21 16:06:38
Message-ID: 5718FA8E.7030901@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 21/04/2016 a las 16:39, Ivan Perales M. escribió:
> Yo también creo que tu problema es una solución más por software que por
> la base de datos.
> Pero ahora, la pregunta sería, ¿el número de factura debe ser
> consecutivo?, si a un cliente se le van a hacer 100 facturas, y a otro
> solo 2, al primer cliente le deben de salir del 1 al 100 y al segundo
> del 101 al 102?, o puede ser posible que al cliente 1 le salgan del 1 al
> 102 y al cliente por ahi del 35 y 47, eso es factible? Por que si esto
> si lo es, yo creo que lo que deberias tener es un método exclusivo que
> ye este regresando el folio. Despues de hacer todas las validaciones en
> el método que crea la factura y ya lo único que queda es guardarla en la
> base de datos, en ese momento deberias llamar a éste método exclusivo
> (que debe crear una transaccion independiente) y que debe estar
> preparado para ser llamado desde diferentes threads, encolando las
> peticiones, asi el método exclusivo checa cual es el siguiente folio,
> actualiza la tabla y lo retorna, las siguientes peticiones entonces
> siempre recibirán el siguiente único. La ventaja de esto es que puedes
> agregar un parámetro adicional como la serie para obtener el folio.
>
> 2016-04-21 9:14 GMT-05:00 Jaime Casanova <jaime(dot)casanova(at)2ndquadrant(dot)com
> <mailto:jaime(dot)casanova(at)2ndquadrant(dot)com>>:
>
> 2016-04-21 8:03 GMT-05:00 Hellmuth Vargas <hivs77(at)gmail(dot)com
> <mailto:hivs77(at)gmail(dot)com>>:
> > Hola Lista
> >
> > Quisiera que aclaráramos y dividiéramos el problema en cuestión: la
> > necesitad del bloqueo es por los Item o artículos que hacen parte
> de la
> > factura para que otro cliente nos los vaya a tomar nuestros artículos
> > mientras se efectúa la factura o es por el numero de la factura?
> Porque
> > según estoy entendiendo en el hilo de la discusión el tema es el
> numero de
> > facturación, si es así no hay necesidad de bloquear las tablas,
> el tema es
> > con la secuencia que genera el numero de factura, que no debe
> tener saltos,
> > debe ser consecutivo, debe ser UNICO, que debe corresponder a un
> rango
> > valido, etc. etc y el enfoque es diferente para lograr esto de forma
> > concurrente.
> >
>
> El problema de usar secuencias es que si puede haber saltos, por
> ejemplo si
> se cancela la operación luego de haber tomado un valor de la secuencia.
> Pero el otro problema que podría haber, o al menos a mi me paso en
> Ecuador,
> es que el gobierno nos obligaba a imprimir un formato especifico en una
> imprenta y nosotros debíamos usar ese formato llenando los espacios en
> blanco pero la imprenta ya debía darte los números de las facturas así
> que si tenias varias personas facturando debías asegurarte que
> terminen las
> transacciones en el orden correcto para que coincidan con los
> números fisicos
> de la factura.
>
> Por supuesto, existe más de una manera de solventar ese problema pero el
> problema existe. Y seguramente hay variantes del mismo problema en
> otras partes.
>
> --
> Jaime Casanova www.2ndQuadrant.com <http://www.2ndQuadrant.com>
> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>
> -
> Enviado a la lista de correo pgsql-es-ayuda
> (pgsql-es-ayuda(at)postgresql(dot)org <mailto:pgsql-es-ayuda(at)postgresql(dot)org>)
> Para cambiar tu suscripción:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>
>
>
>
> --
> Lindolfo Iván Perales Mancinas
> Solo existen 10 tipos de personas en el mundo, las que saben binario y
> las que no.

Las facturas tienen que ser correlativas , sin saltos y por supuesto la
fecha de una factura no puede ser menor que una con numero superior.

Voy a utilizar el select for update con la clausula nowait a una tabla
que voy a crear para el proceso, asi puedo bloquear por empresa,serie.
No voy a hacer el select for update a la propia tabla de series, por que
en el mismo registro esta el ultimo numero de
factura,albaran,pedido,presupuesto, orden de fabricacion y bloquearia
muchos procesos.

Voy a leer el ultimo numero de factura al principio, lo incrementare en
memoria y solo escribiré en el fichero de series al final, justo antes
del commit, creo que es la mejor solución ..

-
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 Ivan Perales M. 2016-04-21 16:14:00 Re: modos de bloqueo
Previous Message Guillermo E. Villanueva 2016-04-21 16:04:52 FTS