Обсуждение: pg_get_constraintdef failing with cache lookup error
Hi all,
pg_get_constraintdef() fails rather easily:
=# select pg_get_constraintdef(1);
ERROR: cache lookup failed for constraint 1
STATEMENT: select pg_get_constraintdef(1);
ERROR: XX000: cache lookup failed for constraint 1
LOCATION: pg_get_constraintdef_worker, ruleutils.c:1305
Now by looking at pg_get_constraintdef_worker()@ruleutils.c it is
commented that this error should never happen:
if (!HeapTupleIsValid(tup)) /* should not happen */
elog(ERROR, "cache lookup failed for constraint %u",
constraintId);
But it happens.
Am I missing something? Shouldn't this error be changed into something
more informative?
Regards,
--
Michael
Michael Paquier <michael.paquier@gmail.com> writes:
> pg_get_constraintdef() fails rather easily:
> =# select pg_get_constraintdef(1);
> ERROR: cache lookup failed for constraint 1
It's expected that the caller will supply a valid pg_constraint OID.
I don't think it's necessary to go out of our way to throw a friendlier
error message if the OID isn't found.
regards, tom lane
On Mon, Apr 27, 2015 at 11:16 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Michael Paquier <michael.paquier@gmail.com> writes: >> pg_get_constraintdef() fails rather easily: >> =# select pg_get_constraintdef(1); >> ERROR: cache lookup failed for constraint 1 > > It's expected that the caller will supply a valid pg_constraint OID. > I don't think it's necessary to go out of our way to throw a friendlier > error message if the OID isn't found. It's clearly at least a bug in the comment to complain that it can't happen if in fact it can. But I would argue that we should never hit an elog just because of bad user input. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
On Tue, Apr 28, 2015 at 3:15 AM, Robert Haas <robertmhaas@gmail.com> wrote: > On Mon, Apr 27, 2015 at 11:16 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> Michael Paquier <michael.paquier@gmail.com> writes: >>> pg_get_constraintdef() fails rather easily: >>> =# select pg_get_constraintdef(1); >>> ERROR: cache lookup failed for constraint 1 >> >> It's expected that the caller will supply a valid pg_constraint OID. >> I don't think it's necessary to go out of our way to throw a friendlier >> error message if the OID isn't found. > > It's clearly at least a bug in the comment to complain that it can't > happen if in fact it can. But I would argue that we should never hit > an elog just because of bad user input. Fine for me to just remove the comment, constraintdef is the only *def function that has such one. -- Michael