| From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
|---|---|
| To: | cen <cen(dot)is(dot)imba(at)gmail(dot)com> |
| Cc: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>, pgsql-bugs(at)lists(dot)postgresql(dot)org |
| Subject: | Re: ERROR: cache lookup failed for collation 0 on DELETE query after upgrading from 9.X to 12.3 |
| Date: | 2020-07-14 16:29:03 |
| Message-ID: | 2874034.1594744143@sss.pgh.pa.us |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
cen <cen(dot)is(dot)imba(at)gmail(dot)com> writes:
> The bug appears when you specify a foreign key of type varchar to point
> to primary key of type uuid.
Ah-hah. For the record, attached is an actually-self-contained test
case.
The problem comes from this bit in RI_FKey_cascade_del, which evidently
was added as part of the nondeterministic-collations patch (5e1963fb7):
if (pk_coll != fk_coll && !get_collation_isdeterministic(pk_coll))
ri_GenerateQualCollation(&querybuf, pk_coll);
which is failing to guard against the possibility that pk_coll is
InvalidOid, i.e. the referenced column is non-collatable.
ri_GenerateQualCollation would correctly do nothing in that case,
but we don't get there because get_collation_isdeterministic has
already fallen over.
While the fix seems relatively straightforward --- probably we just
need to add an OidIsValid(pk_coll) clause here and in the similar tests
elsewhere in ri_triggers.c --- I'm still going to hold Peter's feet
to the fire about this code, because I consider the state of its
documentation to be absolutely unforgivable. There is NO comment
explaining why it'd be appropriate to do this for a nondeterministic
PK collation (and not otherwise). Nor has anything been done to fix the
multiple ways in which this addition falsified ri_GenerateQualCollation's
header comment.
regards, tom lane
| Attachment | Content-Type | Size |
|---|---|---|
| ri-collation-bug-example.sql | text/plain | 1.6 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | PG Bug reporting form | 2020-07-14 17:17:57 | BUG #16541: Timestamp allowing greater than max documented value? |
| Previous Message | Tom Lane | 2020-07-14 15:48:08 | Re: BUG #16536: Segfault with partition-wise joins |