Re: PL/pgSQL question about EXCEPTION clause & corrupt records

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Nick Renders" <postgres(at)arcict(dot)com>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: PL/pgSQL question about EXCEPTION clause & corrupt records
Date: 2020-02-14 15:14:38
Message-ID: 16417.1581693278@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

"Nick Renders" <postgres(at)arcict(dot)com> writes:
> I thought I would write a little PL script that would loop through all
> the data and report any inconsistencies. However, I can't get it to work
> properly.
> ...
> 1) The function has no problem executing the SELECT statement. It is
> only when "rcontents" is returned, that the function fails. This is a
> problem, because the ultimate goal is to loop through all records and
> only return/alert something in case of an error.
> 2) The function never enters the EXCEPTION clause. Instead, when it hits
> the RETURN command, it breaks and shows the same message as in pgAdmin:
> missing chunk number 0 for toast value 8289525 in pg_toast_5572299.

I think what's happening there is that the function doesn't try to
dereference the value's TOAST pointer during SELECT INTO. It just stores
that pointer into a variable, and only sometime later when the actual
content of the value is demanded, do you see the error raised.

The solution to that is to do something that uses the contents of the
busted column right away while still inside the EXCEPTION block, perhaps
along the lines of "select md5(mycolumn) into local_variable from..."

A close reading of

https://www.postgresql.org/docs/current/storage-toast.html

would probably help you understand what's happening here.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Jeremy Schneider 2020-02-15 04:30:16 Re: PL/pgSQL question about EXCEPTION clause & corrupt records
Previous Message Achilleas Mantzios 2020-02-14 14:53:00 Re: PL/pgSQL question about EXCEPTION clause & corrupt records