From: | Andrew Gierth <andrew(at)tao11(dot)riddles(dot)org(dot)uk> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | lara(dot)schembri(at)nyxgg(dot)com, pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: BUG #14621: ERROR: compressed data is corrupt |
Date: | 2017-04-12 13:00:44 |
Message-ID: | 87tw5tvlzn.fsf@news-spur.riddles.org.uk |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
>>>>> "Tom" == Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> writes:
>> Please note i have tried the chk function
>> declare t text;
>> begin t := $1;
>> return false;
>> exception when others then return true;
>> end;
>> which did not work.
Tom> You would get better responses if you defined what you meant by
Tom> "did not work", but I'm going to guess that the issue is that this
Tom> code failed to expose corrupted data. That's probably because it
Tom> would have just assigned the bad datum to "t" without
Tom> decompressing it.
The original intended use of that function (which is one I used to give
out regularly to people on IRC when working with them on data corruption
issues, and no doubt some of them have subsequently posted it on blogs
or whatnot) is to pass in the whole-row var for $1 like so:
select ctid, id from brokentable t where chk(t);
the intent being to detect failures of external toast fetches or other
corruption symptoms.
Unfortunately this is no longer as useful as it was, since a fix some
time back now has chk(t) detoast the fields of t before entering the
function, so the exception doesn't get caught. These days I usually
have people use this one instead:
create function chk(tid) returns boolean language plpgsql
as $f$
declare
r text;
begin
r := (select t from brokentable t where ctid=$1);
return false;
exception when others then
return true;
end;
$f$;
select ctid, id from brokentable t where chk(ctid);
In both versions of the function, it's relying on the fact that
everything will get detoasted and decompressed as part of casting the
record value to text.
--
Andrew (irc:RhodiumToad)
From | Date | Subject | |
---|---|---|---|
Next Message | Lara Schembri | 2017-04-12 14:23:28 | Re: BUG #14621: ERROR: compressed data is corrupt |
Previous Message | Tom Lane | 2017-04-12 12:11:28 | Re: BUG #14621: ERROR: compressed data is corrupt |