Lamentablemente no. Es un requerimiento de negocio q debo respetar ya
q esta impuesto por otro sector. Voy a probar la solución que me
decís Mariano y mañana te cuento.
Gracias por su ayuda.
Saludos,
Ignacio
El Apr 6, 2010, a las 19:17, Mariano Reingart <[email protected]>
escribió:
Para el to_char:
INSERT INTO thuban_seq(seq_id) VALUES (to_char(now(),'YYYYMMDD') ||
to_char(id+1,'00000000'))) RETURNING seq_id INTO item_id;
Y para evitar los posibles problemas como recomienda Alvaro (si
entendí bien, que varios usuarios compitan por el mismo ID, que
igualmente te daría error al insertar por ser duplicado), me parece
que tendrías que poner al principio un:
LOCK TABLE thuban_seq;
lo que bloquearía esta función si hay otro usuario concurrente (y
tendrías que hacerlo al principio de la transacción, posiblemente en
el nivel de aislamiento SERIALIZABLE).
El problema es que bloquearías también cualquier otra operación sob
re
la tabla (hasta que termine la transacción), con la probable pérdida
de rendimiento.
¿No podés usar secuencias automáticas de PostgreSQL (tipo de datos
serial)?, sería más fácil y no tendrías estos problemas.
Sds
Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com
2010/4/6 Ignacio Balcarce <[email protected]>:
Como podría optimizar y mejorar esta función?
Soy nuevo en postgre y realmente me esta costando esto, por donde
puedo ver?
Que cambios les harías y porque crees q tengo el error y como lo
corregirías?
Ignacio
El Apr 6, 2010, a las 18:27, Alvaro Herrera <[email protected]>
escribió:
Ignacio Balcarce escribió:
BEGIN
IF (SELECT max(seq_id) FROM thuban_seq
WHERE seq_id LIKE (to_char(now() + '1
day'::interval,
'YYYYMMDD') || '%')) IS NOT NULL
THEN
SELECT max(seq_id)
INTO
item_id
FROM thuban_seq
WHERE seq_id LIKE
(to_char(now() + '1 day'::interval, 'YYYYMMDD') || '%');
id := substr
(item_id, 9,
length(item_id)-9)::INT8;
ELSE
id:= 00000000;
END IF;
INSERT INTO thuban_seq(seq_id) VALUES (to_char(now(),'YYYYMMDD')
||
(id+1)) RETURNING seq_id INTO item_id;
Espero que tengas algún lock externamente a la ejecución de esta
función, porque así como está es sujeto de condiciones de carr
era.
--
Alvaro Herrera
http://www.amazon.com/gp/registry/DXLWNGRJD34J
"I'm always right, but sometimes I'm more right than other times."
(Linus Torvalds)
--
TIP 3: Si encontraste la respuesta a tu problema, publ�cala, otros te lo
agradecer�n