Busted(?) optimization in ATAddForeignKeyConstraint

Started by Tom Lanealmost 6 years ago5 messages
#1Tom Lane
tgl@sss.pgh.pa.us

I happened to notice this comment in the logic in
ATAddForeignKeyConstraint that tries to decide if it can skip
revalidating a foreign-key constraint after a DDL change:

* Since we require that all collations share the same notion of
* equality (which they do, because texteq reduces to bitwise
* equality), we don't compare collation here.

Hasn't this been broken by the introduction of nondeterministic
collations?

regards, tom lane

#2Thomas Munro
thomas.munro@gmail.com
In reply to: Tom Lane (#1)
Re: Busted(?) optimization in ATAddForeignKeyConstraint

On Fri, Jan 24, 2020 at 11:12 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:

I happened to notice this comment in the logic in
ATAddForeignKeyConstraint that tries to decide if it can skip
revalidating a foreign-key constraint after a DDL change:

* Since we require that all collations share the same notion of
* equality (which they do, because texteq reduces to bitwise
* equality), we don't compare collation here.

Hasn't this been broken by the introduction of nondeterministic
collations?

Similar words appear in the comment for ri_GenerateQualCollation().

#3Peter Eisentraut
peter.eisentraut@2ndquadrant.com
In reply to: Tom Lane (#1)
Re: Busted(?) optimization in ATAddForeignKeyConstraint

On 2020-01-23 23:11, Tom Lane wrote:

I happened to notice this comment in the logic in
ATAddForeignKeyConstraint that tries to decide if it can skip
revalidating a foreign-key constraint after a DDL change:

* Since we require that all collations share the same notion of
* equality (which they do, because texteq reduces to bitwise
* equality), we don't compare collation here.

Hasn't this been broken by the introduction of nondeterministic
collations?

I'm not very familiar with the logic in this function, but I think this
might be okay because the foreign-key equality comparisons are done with
the collation of the primary key, which doesn't change here AFAICT.

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#4Peter Eisentraut
peter.eisentraut@2ndquadrant.com
In reply to: Thomas Munro (#2)
Re: Busted(?) optimization in ATAddForeignKeyConstraint

On 2020-01-24 01:21, Thomas Munro wrote:

On Fri, Jan 24, 2020 at 11:12 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:

I happened to notice this comment in the logic in
ATAddForeignKeyConstraint that tries to decide if it can skip
revalidating a foreign-key constraint after a DDL change:

* Since we require that all collations share the same notion of
* equality (which they do, because texteq reduces to bitwise
* equality), we don't compare collation here.

Hasn't this been broken by the introduction of nondeterministic
collations?

Similar words appear in the comment for ri_GenerateQualCollation().

The calls to this function are all conditional on
!get_collation_isdeterministic(). The comment should perhaps be changed.

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#3)
Re: Busted(?) optimization in ATAddForeignKeyConstraint

Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes:

On 2020-01-23 23:11, Tom Lane wrote:

I happened to notice this comment in the logic in
ATAddForeignKeyConstraint that tries to decide if it can skip
revalidating a foreign-key constraint after a DDL change:
* Since we require that all collations share the same notion of
* equality (which they do, because texteq reduces to bitwise
* equality), we don't compare collation here.
Hasn't this been broken by the introduction of nondeterministic
collations?

I'm not very familiar with the logic in this function, but I think this
might be okay because the foreign-key equality comparisons are done with
the collation of the primary key, which doesn't change here AFAICT.

If we're depending on that, we should just remove the comment and compare
the collations. Seems far less likely to break.

Even if there's a reason not to do the comparison, the comment needs
an update.

regards, tom lane