Thread: pg6.4.2 eating records...
Greetings, I have a question about pg6.4.2, I know it is old but upgrading is not an option at this point in time (not my decision). :( Every night I run the following: <sql to drop all indexes> vacuum; <sql to create all indexes> vacuum analyze; The problem I am having is that somewhere in that process records are being lost. There are two tables that have a one-to-one relationship and records are always missing from one of the tables, the appnotes: create table applicants ( app_id int4 . . . ); create table appnotes ( note_id int4, personalnotes text, technotes text, relonote text, follownote text, profile text ); The rest of the applicant data is stored in the applicant table. I don't really know why the text fields were broken out into their own table, but they are, and for every record in the applicant table there is supposed to be a record in the appnotes table. I added the following query before and after the normal nightly sql and this is what I got: ----------- select a.app_id from applicants as a where a.app_id not in (select n.note_id from appnotes as n where n.note_id=a.app_id); app_id ------ (0 rows) <sql to drop all indexes> vacuum; <sql to create all indexes> vacuum analyze; select a.app_id from applicants as a where a.app_id not in (select n.note_id from appnotes as n where n.note_id=a.app_id); app_id ------ 27555 26446 27556 1734 26502 26246 (6 rows) ------------ What happened? Did vacuum eat them or something? The records are always just missing out of the appnotes table. Any insight would be greatly appreciated. Thank you, Matthew
Matthew Hagerty <matthew@venux.net> writes: > I have a question about pg6.4.2, I know it is old but upgrading is not an > option at this point in time (not my decision). :( Try to persuade your PHB to reconsider ;-) > Every night I run the following: > <sql to drop all indexes> > vacuum; > <sql to create all indexes> > vacuum analyze; This is a little bizarre, to say the least. It should be > <sql to drop all indexes> > vacuum analyze; > <sql to create all indexes> There's no point in running two vacuums, and there's even less point in dropping/recreating indexes around the vacuum only to proceed to run another vacuum with the indexes in place. > select a.app_id from applicants as a where a.app_id not in > (select n.note_id from appnotes as n where n.note_id=a.app_id); > app_id > ------ > 27555 > 26446 > 27556 > 1734 > 26502 > 26246 > (6 rows) Ugh. It would be interesting to see EXPLAIN of this query run just before and just after the vacuum sequence. If it's failing just after the nightly vacuum, what makes it start working again by the time of the next one? In all honesty, you are not likely to attract a whole lot of interest in fixing 6.4.* bugs at this late date. My own interest will only extend as far as making sure the bug is not still there in 7.0... > What happened? Did vacuum eat them or something? The records are always > just missing out of the appnotes table. My guess is the records are still there, but due to some bug the specific query you are using fails to find them. Postgres has many faults, but losing data completely isn't usually one of them. regards, tom lane
At 12:51 AM 6/1/00 -0400, Tom Lane wrote: >Matthew Hagerty <matthew@venux.net> writes: > > I have a question about pg6.4.2, I know it is old but upgrading is not an > > option at this point in time (not my decision). :( > >Try to persuade your PHB to reconsider ;-) I am, believe me, I am! :) > > Every night I run the following: > > > <sql to drop all indexes> > > vacuum; > > <sql to create all indexes> > > vacuum analyze; > >This is a little bizarre, to say the least. It should be > > <sql to drop all indexes> > > vacuum analyze; > > <sql to create all indexes> > >There's no point in running two vacuums, and there's even less point >in dropping/recreating indexes around the vacuum only to proceed to >run another vacuum with the indexes in place. Well, I do it that way based on your feedback, Tom. ;) You said once that you should drop the indexes prior to running vacuum, then another time you said vacuum analyze should be run with indexes in place. So I do both. Is this bad? > > select a.app_id from applicants as a where a.app_id not in > > (select n.note_id from appnotes as n where n.note_id=a.app_id); > > app_id > > ------ > > 27555 > > 26446 > > 27556 > > 1734 > > 26502 > > 26246 > > (6 rows) > >Ugh. It would be interesting to see EXPLAIN of this query run just >before and just after the vacuum sequence. If it's failing just >after the nightly vacuum, what makes it start working again by the >time of the next one? Actually it does not fix itself, I add new records everyday to the appnotes table so the application does not break. I know I know. >In all honesty, you are not likely to attract a whole lot of interest >in fixing 6.4.* bugs at this late date. My own interest will only >extend as far as making sure the bug is not still there in 7.0... I guess I'm not really looking for a fix, I was just wondering if this was a known problem with 6.4.2 and/or if there was maybe a patch that fixed it or something. I need to tell my project manager something intelligent so he can communicate to the client and get them to spend the money to have the database upgraded to 7.0. > > What happened? Did vacuum eat them or something? The records are always > > just missing out of the appnotes table. > >My guess is the records are still there, but due to some bug the >specific query you are using fails to find them. Postgres has many >faults, but losing data completely isn't usually one of them. > > regards, tom lane Thanks Tom! Matthew
Matthew Hagerty <matthew@venux.net> writes: >>>> <sql to drop all indexes> >>>> vacuum; >>>> <sql to create all indexes> >>>> vacuum analyze; >> >> This is a little bizarre, to say the least. It should be >>>> <sql to drop all indexes> >>>> vacuum analyze; >>>> <sql to create all indexes> >> >> There's no point in running two vacuums, and there's even less point >> in dropping/recreating indexes around the vacuum only to proceed to >> run another vacuum with the indexes in place. > Well, I do it that way based on your feedback, Tom. ;) You said once that > you should drop the indexes prior to running vacuum, then another time you > said vacuum analyze should be run with indexes in place. I did? That must have been long ago and far away, because I am now well aware that vacuum analyze doesn't do anything special with indexes... > So I do both. Is this bad? Well, other than causing wear and tear on your disk drives, it probably isn't harmful as long as you've got the cycles to spare. But it's certainly a waste of time. >> In all honesty, you are not likely to attract a whole lot of interest >> in fixing 6.4.* bugs at this late date. My own interest will only >> extend as far as making sure the bug is not still there in 7.0... > I guess I'm not really looking for a fix, I was just wondering if this was > a known problem with 6.4.2 and/or if there was maybe a patch that fixed it > or something. Dunno. We've fixed a heckuva lot of bugs since 6.4, but I don't have enough information to tell if this is one of them. If it remains unfixed, we'll sure do our best to fix it ... but we'd really like to see a report against 7.0 before we spend a lot of effort investigating. regards, tom lane