Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-14 Thread Tom Lane
Alvaro Herrera [EMAIL PROTECTED] writes:
 Hmm ... that would be strange.  Off-the-cuff idea: we introduced code to
 advance relfrozenxid in CLUSTER, TRUNCATE and table-rewriting forms of
 ALTER TABLE.  Perhaps the problem is that we're neglecting to update it
 for the toast table there. AFAIR I analyzed the cases and they were all
 handled, but perhaps I forgot something.

I found a smoking gun ...

regression=# create table foo (f1 serial primary key, f2 text);
NOTICE:  CREATE TABLE will create implicit sequence foo_f1_seq for serial 
column foo.f1
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index foo_pkey for 
table foo
CREATE TABLE
regression=# insert into foo values(1,repeat('xyzzy',10));
INSERT 0 1
regression=# insert into foo values(2,repeat('xqzzy',10));
INSERT 0 1
regression=# select relname, relkind, relfrozenxid from pg_class order by oid 
desc limit 6;
relname| relkind | relfrozenxid 
---+-+--
 foo_pkey  | i   |0
 pg_toast_707220_index | i   |0
 pg_toast_707220   | t   |   119421
 foo   | r   |   119421
 foo_f1_seq| S   |0
 xmlview5  | v   |0
(6 rows)

regression=# cluster foo_pkey on foo;
CLUSTER
regression=# select relname, relkind, relfrozenxid from pg_class order by oid 
desc limit 6;
relname| relkind | relfrozenxid 
---+-+--
 pg_toast_707231_index | i   |0
 pg_toast_707231   | t   |   119424
 foo_pkey  | i   |0
 foo   | r   |   4195086720
 foo_f1_seq| S   |0
 xmlview5  | v   |0
(6 rows)

So something is out of whack in CLUSTER.  However it only seems to be
broken in HEAD, so I'm not sure this helps to explain the original
report.  (Speculation: this is related to the rewrite to make CLUSTER
MVCC-safe?)

regards, tom lane

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-14 Thread Alvaro Herrera
Tom Lane wrote:

 regression=# cluster foo_pkey on foo;
 CLUSTER
 regression=# select relname, relkind, relfrozenxid from pg_class order by oid 
 desc limit 6;
 relname| relkind | relfrozenxid 
 ---+-+--
  pg_toast_707231_index | i   |0
  pg_toast_707231   | t   |   119424
  foo_pkey  | i   |0
  foo   | r   |   4195086720
  foo_f1_seq| S   |0
  xmlview5  | v   |0
 (6 rows)
 
 So something is out of whack in CLUSTER.  However it only seems to be
 broken in HEAD, so I'm not sure this helps to explain the original
 report.  (Speculation: this is related to the rewrite to make CLUSTER
 MVCC-safe?)

Right ... see copy_heap_data --- it sets FreezeXid as relfrozenxid.

If we were to scan each tuple as it is inserted, we could store a higher
relfrozenxid, but I doubt we want to do that.

Perhaps what we could do is take the relfrozenxid from the old relation
and copy it over, if it's later than FreezeXid?

-- 
Alvaro Herrerahttp://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-14 Thread Tom Lane
Alvaro Herrera [EMAIL PROTECTED] writes:
 Perhaps what we could do is take the relfrozenxid from the old relation
 and copy it over, if it's later than FreezeXid?

It certainly doesn't seem to make any sense to allow the rel's
relfrozenxid to go backwards.  Indeed this coding lets it end up less
than the DB's datfrozenxid, which is certainly inappropriate.

What might be the best idea is to advance FreezeXid to the old
relfrozenxid between the vacuum_set_xid_limits and begin_heap_rewrite
calls.  Then we'd be quite certain we are not lying: anything older
than that did indeed get frozen.

regards, tom lane

---(end of broadcast)---
TIP 7: You can help support the PostgreSQL project by donating at

http://www.postgresql.org/about/donate


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Alvaro Herrera
Joshua D. Drake wrote:

 SELECT oid::regclass FROM pg_class WHERE
 reltoastrelid='pg_toast.pg_toast_49013869'::regclass;

 oid | pg_temp_24.tmp_isp_blk_chk

 The hack to get this cleaned up was to connect about 2 dozen times (to
 get to slot 24) with psql via different sessions and create temp
 tables. Once we hit slot 24, the probably instantly went away and the
 database returned to normal state.

Ah -- interesting.  This is a known issue, but we haven't found a
solution yet.

-- 
Alvaro Herrerahttp://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

---(end of broadcast)---
TIP 5: don't forget to increase your free space map settings


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Joshua D. Drake
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On Mon, 7 Jan 2008 09:18:24 -0300
Alvaro Herrera [EMAIL PROTECTED] wrote:

 Joshua D. Drake wrote:
 
  SELECT oid::regclass FROM pg_class WHERE
  reltoastrelid='pg_toast.pg_toast_49013869'::regclass;
 
  oid | pg_temp_24.tmp_isp_blk_chk
 
  The hack to get this cleaned up was to connect about 2 dozen times
  (to get to slot 24) with psql via different sessions and create
  temp tables. Once we hit slot 24, the probably instantly went away
  and the database returned to normal state.
 
 Ah -- interesting.  This is a known issue, but we haven't found a
 solution yet.
 

Is there bug number?

Sincerely,

Joshua D. Drake

- -- 
The PostgreSQL Company: Since 1997, http://www.commandprompt.com/ 
Sales/Support: +1.503.667.4564   24x7/Emergency: +1.800.492.2240
Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
SELECT 'Training', 'Consulting' FROM vendor WHERE name = 'CMD'


-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFHglltATb/zqfZUUQRAk19AJ9GywJ7ohqGZa4jrRYtufgbwCacowCgrgml
00egslWmlrI0MK2sJjyc63I=
=Y4Ok
-END PGP SIGNATURE-

---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
   choose an index scan if your joining column's datatypes do not
   match


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Bruce Momjian
Joshua D. Drake wrote:
   SELECT oid::regclass FROM pg_class WHERE
   reltoastrelid='pg_toast.pg_toast_49013869'::regclass;
  
   oid | pg_temp_24.tmp_isp_blk_chk
  
   The hack to get this cleaned up was to connect about 2 dozen times
   (to get to slot 24) with psql via different sessions and create
   temp tables. Once we hit slot 24, the probably instantly went away
   and the database returned to normal state.
  
  Ah -- interesting.  This is a known issue, but we haven't found a
  solution yet.
  
 
 Is there bug number?

I assume it is this TODO item:

o Prevent long-lived temporary tables from causing frozen-xid
  advancement starvation

  The problem is that autovacuum cannot vacuum them to set frozen xids;
  only the session that created them can do that.
  http://archives.postgresql.org/pgsql-general/2007-06/msg01645.php

but am confused how the fix worked.  Have all of these backends been
active for 1 billion transactions?

-- 
  Bruce Momjian  [EMAIL PROTECTED]http://momjian.us
  EnterpriseDB http://postgres.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +

---(end of broadcast)---
TIP 7: You can help support the PostgreSQL project by donating at

http://www.postgresql.org/about/donate


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Joshua D. Drake
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On Mon, 7 Jan 2008 11:58:29 -0500 (EST)
Bruce Momjian [EMAIL PROTECTED] wrote:

   Ah -- interesting.  This is a known issue, but we haven't found a
   solution yet.
   
  
  Is there bug number?
 
 I assume it is this TODO item:
 
 o Prevent long-lived temporary tables from causing frozen-xid
   advancement starvation
 
   The problem is that autovacuum cannot vacuum them to set
 frozen xids; only the session that created them can do that.
   http://archives.postgresql.org/pgsql-general/2007-06/msg01645.php
 
 but am confused how the fix worked.  Have all of these backends been
 active for 1 billion transactions?

Well it certainly appears that the TODO item is related. However there
are a couple of differences.

1. I had to manually vacuum because we had already hid xidStoplimit.

2. Postgres has been restarted multiple times and it made zero
difference.

E.g; PostgreSQL isn't cleaning up after itself and it isn't apparent
when it happens. 

Sincerely,

Joshua D. Drake
 


- -- 
The PostgreSQL Company: Since 1997, http://www.commandprompt.com/ 
Sales/Support: +1.503.667.4564   24x7/Emergency: +1.800.492.2240
Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
SELECT 'Training', 'Consulting' FROM vendor WHERE name = 'CMD'


-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFHgl0CATb/zqfZUUQRAtcnAKChLV9E4p7klYXRnVoEWKGsM+xv2QCgjmKB
JrBjOrL9i/4RcwXKMNk+z5I=
=6Gdf
-END PGP SIGNATURE-

---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
   choose an index scan if your joining column's datatypes do not
   match


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Gregory Stark
Joshua D. Drake [EMAIL PROTECTED] writes:

 On Mon, 7 Jan 2008 11:58:29 -0500 (EST)
 Bruce Momjian [EMAIL PROTECTED] wrote:

 I assume it is this TODO item:
 
 o Prevent long-lived temporary tables from causing frozen-xid
   advancement starvation
 
   The problem is that autovacuum cannot vacuum them to set
 frozen xids; only the session that created them can do that.
   http://archives.postgresql.org/pgsql-general/2007-06/msg01645.php
 
 but am confused how the fix worked.  Have all of these backends been
 active for 1 billion transactions?

 Well it certainly appears that the TODO item is related. However there
 are a couple of differences.

Yeah, it seems there are two bugs here. 1) temporary tables prevent frozen-xid
advancement and 2) if a process dies at the wrong moment it's possible to
temporary tables. Either one alone is pretty minor but I guess the combination
is lethal.

-- 
  Gregory Stark
  EnterpriseDB  http://www.enterprisedb.com
  Ask me about EnterpriseDB's PostGIS support!

---(end of broadcast)---
TIP 6: explain analyze is your friend


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Gregory Stark
Gregory Stark [EMAIL PROTECTED] writes:

 Joshua D. Drake [EMAIL PROTECTED] writes:

 On Mon, 7 Jan 2008 11:58:29 -0500 (EST)
 Bruce Momjian [EMAIL PROTECTED] wrote:

 I assume it is this TODO item:
 
 o Prevent long-lived temporary tables from causing frozen-xid
   advancement starvation
 
   The problem is that autovacuum cannot vacuum them to set
 frozen xids; only the session that created them can do that.
   http://archives.postgresql.org/pgsql-general/2007-06/msg01645.php
 
 but am confused how the fix worked.  Have all of these backends been
 active for 1 billion transactions?

 Well it certainly appears that the TODO item is related. However there
 are a couple of differences.

 Yeah, it seems there are two bugs here. 1) temporary tables prevent frozen-xid
 advancement and 2) if a process dies at the wrong moment it's possible to
 temporary tables. Either one alone is pretty minor but I guess the combination
 is lethal.

oops, 2) if a process dies at the wrong moment it's possible to *leak*
temporary tables


-- 
  Gregory Stark
  EnterpriseDB  http://www.enterprisedb.com
  Ask me about EnterpriseDB's On-Demand Production Tuning

---(end of broadcast)---
TIP 1: if posting/reading through Usenet, please send an appropriate
   subscribe-nomail command to [EMAIL PROTECTED] so that your
   message can get through to the mailing list cleanly


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Darcy Buskermolen
On Monday 07 January 2008 09:10:24 Joshua D. Drake wrote:
 On Mon, 7 Jan 2008 11:58:29 -0500 (EST)

 Bruce Momjian [EMAIL PROTECTED] wrote:
Ah -- interesting.  This is a known issue, but we haven't found a
solution yet.
  
   Is there bug number?
 
  I assume it is this TODO item:
 
  o Prevent long-lived temporary tables from causing frozen-xid
advancement starvation
 
The problem is that autovacuum cannot vacuum them to set
  frozen xids; only the session that created them can do that.
   
  http://archives.postgresql.org/pgsql-general/2007-06/msg01645.php
 
  but am confused how the fix worked.  Have all of these backends been
  active for 1 billion transactions?

 Well it certainly appears that the TODO item is related. However there
 are a couple of differences.

 1. I had to manually vacuum because we had already hid xidStoplimit.

 2. Postgres has been restarted multiple times and it made zero
 difference.

 E.g; PostgreSQL isn't cleaning up after itself and it isn't apparent
 when it happens.

After a fresh start of postgres, there should be no temp tables, so would a 
work around to this at least be at postmaster start to (for a lack of a 
better pseudo code ) DROP SCHEMA pg_temp* CASCADE; before coming up in 
interactive mode?  Doing this would at least have allowedthe manual vacuum to 
do what it needed and not have caused confusion on the part of the user?  
Also it would have greatly reduced the total time to resolution, and not 
requiring hacking the backend to get there.




 Sincerely,

 Joshua D. Drake



-- 
Darcy Buskermolen
Command Prompt, Inc.
+1.503.667.4564 X 102
http://www.commandprompt.com/
PostgreSQL solutions since 1997

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Joshua D. Drake
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On Mon, 7 Jan 2008 10:37:18 -0800
Darcy Buskermolen [EMAIL PROTECTED] wrote:

  1. I had to manually vacuum because we had already hid xidStoplimit.
 
  2. Postgres has been restarted multiple times and it made zero
  difference.
 
  E.g; PostgreSQL isn't cleaning up after itself and it isn't apparent
  when it happens.
 
 After a fresh start of postgres, there should be no temp tables, so
 would a work around to this at least be at postmaster start to (for a
 lack of a better pseudo code ) DROP SCHEMA pg_temp* CASCADE; before
 coming up in interactive mode?  Doing this would at least have
 allowedthe manual vacuum to do what it needed and not have caused
 confusion on the part of the user? Also it would have greatly reduced
 the total time to resolution, and not requiring hacking the backend
 to get there.
 

+1

Joshua D. Drake



- -- 
The PostgreSQL Company: Since 1997, http://www.commandprompt.com/ 
Sales/Support: +1.503.667.4564   24x7/Emergency: +1.800.492.2240
Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
SELECT 'Training', 'Consulting' FROM vendor WHERE name = 'CMD'


-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFHgnQaATb/zqfZUUQRAt1qAJ4hzeNG8fzA4l5y/luNrg3eGOz5QQCfcvtZ
xMuLPQSEbvG+AYfTRkEyLD0=
=+Lkk
-END PGP SIGNATURE-

---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
   choose an index scan if your joining column's datatypes do not
   match


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Tom Lane
Darcy Buskermolen [EMAIL PROTECTED] writes:
 After a fresh start of postgres, there should be no temp tables, so would a 
 work around to this at least be at postmaster start to (for a lack of a 
 better pseudo code ) DROP SCHEMA pg_temp* CASCADE; before coming up in 
 interactive mode?

The argument against this is the same as not wiping out
apparently-unreferenced regular tables: automatically destroying the
evidence after a crash is someday going to bite you.  Admittedly,
this argument is a bit weaker for temp tables than it is for regular
tables, but that only goes to the question of whether the data is
valuable on its own terms, not whether it might be valuable for crash
analysis.

The real question that Josh's report brings up to me is why the heck was
there an orphaned temp table?  Especially if it was only a toast table
and not the linked regular temp table?  Something happened there that
should not have.

regards, tom lane

---(end of broadcast)---
TIP 7: You can help support the PostgreSQL project by donating at

http://www.postgresql.org/about/donate


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Andrew - Supernews
On 2008-01-07, Tom Lane [EMAIL PROTECTED] wrote:
 The real question that Josh's report brings up to me is why the heck was
 there an orphaned temp table?  Especially if it was only a toast table
 and not the linked regular temp table?  Something happened there that
 should not have.

The regular table was there too, but the regular table's relfrozenxid
was apparently recent, only the toast table's was old:

 pg_toast_49013869 | 2146491285
[...]
 SELECT oid::regclass FROM pg_class WHERE
 reltoastrelid='pg_toast.pg_toast_49013869'::regclass;
   
 oid | pg_temp_24.tmp_isp_blk_chk

The regular table had not shown up on a query of age(relfrozenxid) WHERE
relkind='r' but the toast table showed up on a similar query with WHERE
relkind='t'.

-- 
Andrew, Supernews
http://www.supernews.com - individual and corporate NNTP services

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Tom Lane
Andrew - Supernews [EMAIL PROTECTED] writes:
 On 2008-01-07, Tom Lane [EMAIL PROTECTED] wrote:
 The real question that Josh's report brings up to me is why the heck was
 there an orphaned temp table?  Especially if it was only a toast table
 and not the linked regular temp table?  Something happened there that
 should not have.

 The regular table was there too, but the regular table's relfrozenxid
 was apparently recent, only the toast table's was old:

Hmm, that's even more odd, since AFAICS vacuum will always vacuum a
toast table immediately after vacuuming the parent.  I wonder whether
we have a bug somewhere that allows a toast table's relfrozenxid to
get initially set to something substantially different from the
parent's.

(BTW, if the parent table *was* there then Josh hardly needed any fancy
jujitsu to clear the problem -- drop table pg_temp_24.tmp_isp_blk_chk
as a superuser should've worked.  I wouldn't try this if the originating
backend were still around, but if it's not then there's not going to be
anything all that special about the temp table.)

regards, tom lane

---(end of broadcast)---
TIP 6: explain analyze is your friend


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Alvaro Herrera
Tom Lane wrote:
 Andrew - Supernews [EMAIL PROTECTED] writes:
  On 2008-01-07, Tom Lane [EMAIL PROTECTED] wrote:
  The real question that Josh's report brings up to me is why the heck was
  there an orphaned temp table?  Especially if it was only a toast table
  and not the linked regular temp table?  Something happened there that
  should not have.
 
  The regular table was there too, but the regular table's relfrozenxid
  was apparently recent, only the toast table's was old:
 
 Hmm, that's even more odd, since AFAICS vacuum will always vacuum a
 toast table immediately after vacuuming the parent.  I wonder whether
 we have a bug somewhere that allows a toast table's relfrozenxid to
 get initially set to something substantially different from the
 parent's.

Hmm ... that would be strange.  Off-the-cuff idea: we introduced code to
advance relfrozenxid in CLUSTER, TRUNCATE and table-rewriting forms of
ALTER TABLE.  Perhaps the problem is that we're neglecting to update it
for the toast table there.  AFAIR I analyzed the cases and they were all
handled, but perhaps I forgot something.

-- 
Alvaro Herrerahttp://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

---(end of broadcast)---
TIP 2: Don't 'kill -9' the postmaster


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Joshua D. Drake

Alvaro Herrera wrote:

Tom Lane wrote:

Andrew - Supernews [EMAIL PROTECTED] writes:

On 2008-01-07, Tom Lane [EMAIL PROTECTED] wrote:

The real question that Josh's report brings up to me is why the heck was
there an orphaned temp table?  Especially if it was only a toast table
and not the linked regular temp table?  Something happened there that
should not have.

The regular table was there too, but the regular table's relfrozenxid
was apparently recent, only the toast table's was old:

Hmm, that's even more odd, since AFAICS vacuum will always vacuum a
toast table immediately after vacuuming the parent.  I wonder whether
we have a bug somewhere that allows a toast table's relfrozenxid to
get initially set to something substantially different from the
parent's.


Hmm ... that would be strange.  Off-the-cuff idea: we introduced code to
advance relfrozenxid in CLUSTER, TRUNCATE and table-rewriting forms of
ALTER TABLE.  Perhaps the problem is that we're neglecting to update it
for the toast table there.  AFAIR I analyzed the cases and they were all
handled, but perhaps I forgot something.


Just to throw another variable into the mix. This machine was a PITR 
slave that was pushed into production about two weeks ago.


Joshua D. Drake



---(end of broadcast)---
TIP 2: Don't 'kill -9' the postmaster


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-07 Thread Alvaro Herrera
Joshua D. Drake wrote:
 Alvaro Herrera wrote:

 Hmm ... that would be strange.  Off-the-cuff idea: we introduced code to
 advance relfrozenxid in CLUSTER, TRUNCATE and table-rewriting forms of
 ALTER TABLE.  Perhaps the problem is that we're neglecting to update it
 for the toast table there.  AFAIR I analyzed the cases and they were all
 handled, but perhaps I forgot something.

 Just to throw another variable into the mix. This machine was a PITR slave 
 that was pushed into production about two weeks ago.

Ah, right, I bet we have a smoking gun here.

-- 
Alvaro Herrerahttp://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

---(end of broadcast)---
TIP 4: Have you searched our list archives?

   http://archives.postgresql.org


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-06 Thread Joshua D. Drake

Joshua D. Drake wrote:

-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Hello,

I spent the better part of this evening tracking down a problem with a
high velocity database. The database had entered the point of no return
by invoking xidStopLimit.


8.2.4

Joshua D. Drake

---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
  choose an index scan if your joining column's datatypes do not
  match


Re: [HACKERS] Bug: Unreferenced temp tables disables vacuum to update xid

2008-01-06 Thread Joshua D. Drake

Joshua D. Drake wrote:

Ping?


-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Hello,

I spent the better part of this evening tracking down a problem with a
high velocity database. The database had entered the point of no return
by invoking xidStopLimit.

This by itself isn't a problem because you just vacuum right? Well we
vacuumed... and the problem didn't resolve itself. It continued to
throw the warning:

FATAL:  database is not accepting commands to avoid wraparound
data loss in database foo 
HINT:  Stop the postmaster and use a standalone backend to vacuum

database foo.

And when in --single with postgres we would get:

2008-01-06 02:04:45 EST WARNING:  database foo must be vacuumed
within 993712 transactions 
2008-01-06 02:04:45 EST HINT:  To avoid a database shutdown,

execute a full-database VACUUM in foo.

We performed all the requisite queries to determine where the problem
was:

SELECT relname, age(relfrozenxid) FROM pg_class WHERE relkind = 'r';

Everything returned ~ 50 mil

But:

SELECT datname, age(datfrozenxid) FROM pg_database;

Always returned ~ 2bil.

Even after two vacuums (one a vacuum and the other a vacuum analyze).

Anyway.. we tried a lot of different things, including adjusting
xidStopLimit so we could get back into interactive mode and have a
reasonable interface to work with...

The end result was that by chance we checked relkind = 't' instead of
'r' (Shout out to AndrewSN). And sure enough:

pg_toast_49013869 | 2146491285

And yes:

SELECT oid::regclass FROM pg_class WHERE
reltoastrelid='pg_toast.pg_toast_49013869'::regclass;

oid | pg_temp_24.tmp_isp_blk_chk

The hack to get this cleaned up was to connect about 2 dozen times (to
get to slot 24) with psql via different sessions and create temp
tables. Once we hit slot 24, the probably instantly went away and the
database returned to normal state.

May I humbly suggest that a:

* We need to check clean up unreferenced temp relations on startup and
remove them

* We need to change the docs for the following query:

SELECT relname, age(relfrozenxid) FROM pg_class WHERE relkind = 'r';

To:

SELECT relname, age(relfrozenxid) FROM pg_class WHERE relkind = 'r' OR
relkind = 't';

I apologize if this doesn't quite make sense. I am very tired but I
wanted to make sure to get this out on the list.

Sincerely,

Joshua D. Drake

- -- 
The PostgreSQL Company: Since 1997, http://www.commandprompt.com/ 
Sales/Support: +1.503.667.4564   24x7/Emergency: +1.800.492.2240

Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
SELECT 'Training', 'Consulting' FROM vendor WHERE name = 'CMD'


-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFHgJQaATb/zqfZUUQRAnKAAJ0fs0OahvGjlJq6fWrFZ67h1tY6qwCfcHmR
K0xOKL+JMAcPTQGbqR3qy1M=
=te9S
-END PGP SIGNATURE-

---(end of broadcast)---
TIP 1: if posting/reading through Usenet, please send an appropriate
   subscribe-nomail command to [EMAIL PROTECTED] so that your
   message can get through to the mailing list cleanly




---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

  http://www.postgresql.org/docs/faq