Re: database corruption - Mailing list pgsql-hackers

From Joe Conway
Subject Re: database corruption
Date
Msg-id 3F51062A.70106@joeconway.com
Whole thread Raw
In response to Re: database corruption  (Alvaro Herrera <alvherre@dcc.uchile.cl>)
Responses Re: database corruption
List pgsql-hackers
Alvaro Herrera wrote:
> On Sat, Aug 30, 2003 at 12:57:26PM -0700, Joe Conway wrote:
> 
>>Joe Conway wrote:
>>
>>>I don't have any more detail yet on exactly what he was doing at this 
>>>point, but I grabbed a copy of $PGDATA and looked at it on my own 
>>>machine (since he doesn't have debug and assert support). Logging into 
>>>any other database works fine, but the offending database produces this 
>>>backtrace:
>>
>>It turns out the "corruption" was user error. He ran a statement that 
>>inadvertantly set reltriggers = 1 for every row in pg_class. This is 
>>what led to the infinite recursion.
> 
> For the record, how were you able to detect this?

The backtrace from the core file showed that the recursion was going on 
between RelationSysNameGetRelation(), relation_openr(), heap_openr(), 
RelationBuildTriggers() and RelationBuildDesc(). It seemed odd that 
pg_trigger seemed to be getting a trigger applied to it, so I guessed 
that bypassing RelationBuildTriggers() for system tables would allow me 
in to the database.

About the time I got in and started looking around, I finally got in 
touch with the user, who confirmed he had been trying to disable then 
re-enable triggers when the problem occurred. He ran a statement like:  update pg_class set reltriggers = 1;
thinking that reltriggers was a "flag" (0 == off, 1 == on). That's when 
it all suddenly made sense to me ;-)

Fortunately this was his own development database he was messing with, 
but it was an interesting exercise none-the-less. Maybe this reinforces 
the need to have a command for enabling/disabling triggers. I vaguely 
remember discussion about that -- did it make it into 7.4?

Joe





pgsql-hackers by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: database corruption
Next
From: Manfred Spraul
Date:
Subject: Re: Linux2.6 overcommit behaviour