This happens in the same session. I have an application that had been encountering this issue periodically, and I have rigged it to send me an email whenever it happens. I¹ll get that email, fire up my client, and try to update the row manually. Right after my update (autocommit is on, but it makes no difference if I do a manual commit), I¹ll issue a select statement on the same row, and it returns with the value from before the update. I¹ll keep watching that row, and eventually it will show the right value in that column. Once again, looking at the query logs, there are no conflicting updates happening.
I¹m not sure the corrupted index issue is it. After updating, the attribute shows up as the ³old² value with selects on different columns, ie: UPDATE mytable SET myattribute=1 WHERE id=14; COMMIT; SELECT * from mytable WHERE myattribute=0 Would include the that row (id=14). So it isn¹t just a single corrupted index, if that is indeed the issue. Thanks for your help, Erik Peterson On 7/17/07 10:54 AM, "Tom Lane" <[EMAIL PROTECTED]> wrote: > "Erik Peterson" <[EMAIL PROTECTED]> writes: >> > I'm having this issue where once or twice per day (out of ~100,000 = >> > queries) >> > the table doesn't reflect a committed update immediately. Usually when = >> > this >> > problem occurs the update takes 1-3 minutes to be reflected in SELECT >> > queries. Occasionally, it has taken more than 10 minutes. > >> > The session could go something like this: > >> > UPDATE mytable SET myattribute=1 WHERE id=14; >> > COMMIT; >> > SELECT myattribute FROM mytable WHERE id=14; > >> > (Query returns myattribute with a value of 0) > >> > (Wait 5 minutes) >> > SELECT myattribute FROM mytable WHERE id=14; > >> > (Query returns myattribute with a value of 1) > > To be blunt, I don't believe it. I can think of bugs by which a commit > might be lost entirely, but there is no mechanism that would make it > good five minutes later. I think you've misdiagnosed your problem > somehow --- either you're not really committing where you think you are, > or the observing query is using an old snapshot (maybe you are running > it in a serializable transaction?) > > A somewhat more credible theory would revolve around corrupted indexes. > If there's a corrupted index on "id" in the above example, a query might > sometimes find one version of a row and sometimes find another; although > any given search would be deterministic, apparently-unrelated changes in > the index contents could change which one is found. > > Have you actually been able to reproduce a problem as sketched above in > a single session --- ie, the update and the contradictory observations > all done by the same backend? Or is this a representation of things > that are happening in different sessions? What else is going on > meanwhile? > > regards, tom lane >