[Pgsql-ayuda] Problema en función al usar "timestamp + interval '$1 seconds' "

Alvaro Herrera alvherre@dcc.uchile.cl
Mon, 27 Oct 2003 12:41:50 -0300


On Mon, Oct 27, 2003 at 12:06:43PM -0300, Sebastián Villalba wrote:
> Alvaro Herrera wrote:

> >>prensa=# select checktimeout('64ad1f1cc3ed102dc116abbf73c5f0cb', 120);
> >>WARNING:  COMMIT: no transaction in progress
> >>server closed the connection unexpectedly
> >>              This probably means the server terminated abnormally
> >>              before or while processing the request.
> >>The connection to the server was lost. Attempting reset: Failed.
> >>!#
> 
> Hola Alvaro. Actualicé a la 7.3.4 y me dá exactamente el mismo problema. 

Hmm..  Puedes darme un script autocontenido que permita reproducir este
problema?

> Aunque a ésta prueba la  hice en otra máquina donde creé a manopla la
> tabla "conexiones" hice el insert también a mano y creé la función sin
> ningún problema.

Quizás tienes reglas, triggers u otras funciones en esa tabla?  No
debería caerse en ningún caso, pero puede ayudar a explicarlo.

> p/d: qué es "Halloween"?

Uno de los problemas estándares en bases de datos.  Supón que tienes una
tabla con una fila:

 a | b
---+---
 1 | 5

y haces un
UPDATE tabla WHERE a=1 SET b=6;

El sistema va a recorrer la tabla buscando a=1; insertará la nueva fila
con a=1, b=6, y te va a quedar

 a | b
---+---
 1 | 5   <-- obsoleta
 1 | 6   <-- nueva

Luego el recorrido continúa y encuentra la tupla nueva, y vuelve a
insertar la tupla nueva, sigue recorriendo, la encuentra y vuelve a
insertar ... ==> recursión infinita.  A esto se le llama "the Halloween
problem".  Hay varias manifestaciones de esto, algunas más sutiles que
otras.  Uno sospecha que están todas corregidas, pero de vez en cuando
surge alguna nueva ...

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end." (2nd Commandment for C programmers)