Re: Test of value equivalency of row type, feature or bug? - Mailing list pgsql-bugs

From Tom Lane
Subject Re: Test of value equivalency of row type, feature or bug?
Date
Msg-id 11491.1545316500@sss.pgh.pa.us
Whole thread Raw
In response to Test of value equivalency of row type, feature or bug?  (孙冰 <subi.the.dream.walker@gmail.com>)
Responses Re: Test of value equivalency of row type, feature or bug?  ("David G. Johnston" <david.g.johnston@gmail.com>)
List pgsql-bugs
=?UTF-8?B?5a2Z5Yaw?= <subi.the.dream.walker@gmail.com> writes:
> select t=t from (select 1, null) t;

> If I manage to catch the documents, the result of the query should be null,
> as an equivalency comparison of null-contained row-typed values is null.
> Surprisingly, the query result turns out to be true.

> Is this behavior a feature or a bug?

It's a feature.  The btree comparison functions (<, =, >, etc) for
composite types have to provide a total order for their datatypes,
and treating an individual null field as a reason to return null
would break that.

The whole question of when a composite value "is null" is messy.
It ought not be --- IMO, either you have a tuple or you don't ---
but the SQL committee did nobody any favors with their creative
specification for what "x IS [NOT] NULL" means for composite x.

Having said that, though, perhaps "t IS NOT NULL" would do what
you want here, since it's defined to be true only when each of
t's fields is not null.

            regards, tom lane


pgsql-bugs by date:

Previous
From: 孙冰
Date:
Subject: Test of value equivalency of row type, feature or bug?
Next
From: "David G. Johnston"
Date:
Subject: Re: Test of value equivalency of row type, feature or bug?