On Thu, Sep 17, 2015 at 9:39 AM, Adrian Klaver <adrian.kla...@aklaver.com>
wrote:

> On 09/17/2015 06:32 AM, Albe Laurenz wrote:
>
>> pinker wrote:
>>
>>> I've tried to write audit trigger which fires only when data changed, so
>>> I used "WHEN (OLD.* IS
>>> DISTINCT FROM NEW.*)" clause as described in documentation
>>> <http://www.postgresql.org/docs/9.4/static/sql-createtrigger.html> .
>>> Should this clause be independent
>>> from data type? because an error occurs when I'm trying to modify row
>>> with point data type: ERROR:
>>> could not identify an equality operator for type point
>>>
>>
>> I guess it is dependent on data type as it requires an equality operator,
>> and type "point" doesn't have one.
>>
>
> To echo the OP, why is that?
>
> http://www.postgresql.org/docs/9.4/interactive/functions-comparison.html
>
> For non-null inputs, IS DISTINCT FROM is the same as the <> operator.
>
> So:
>
> test=> select '(1,2)'::point <> '(1,2)'::point;
>  ?column?
> ----------
>  f
> (1 row)
>
> test=> select '(1,2)'::point <> '(1,3)'::point;
>  ?column?
> ----------
>  t
>
> test=> select '(1,2)'::point <> null;
>  ?column?
> ----------
>
> (1 row)
>
>
​SELECT not ('(0,4)'::point = '(1,2)'::point)

ERROR: operator does not exist: point = point

If it calling it a bug gets it changed I'm game...but IS DISTINCT FROM
apparently looks for an equality operator and then performs negation
instead of looking for a "non-equality" operator.  Since the latter doesn't
really even make sense (TBH it's probably syntatic sugar transformed by the
parser) I don't blame it.

David J.

Reply via email to