On Jan 17, 2010, at 3:47 PM, Tom Lane wrote:
>> create type y as (c char, n int);
>> select ('a', NULL)::y = ('a', NULL)::y; -- TRUE
>> select ('a', NULL) = ('a', NULL); -- NULL
>
>> I would expect those to evaluate to the same thing.
>
> The latter gets simplified to ('a' = 'a') AND (NULL = NULL).
> The former doesn't --- it goes through record_eq, which treats
> two nulls as equal.
Shouldn't this go through record_eq, then?
try=# select row('a', NULL) = row('a', NULL);
?column?
----------
[null]
Best,
David