Re: record identical operator

From: Benedikt Grundmann <bgrundmann(at)janestreet(dot)com>
To: Kevin Grittner <kgrittn(at)ymail(dot)com>
Cc: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: record identical operator
Date: 2013-09-13 07:03:17
Message-ID: CADbMkNOQ2=2eA63Nj-xQb1UejcPMkpuZ5j1bYvO7oH2u7T+ZPg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Sep 12, 2013 at 11:27 PM, Kevin Grittner <kgrittn(at)ymail(dot)com> wrote:

> Attached is a patch for a bit of infrastructure I believe to be
> necessary for correct behavior of REFRESH MATERIALIZED VIEW
> CONCURRENTLY as well as incremental maintenance of matviews.
> [...]
> The patch adds an "identical" operator (===) for the record type:
>

[...]

> The new operator is logically similar to IS NOT DISTINCT FROM for a
> record, although its implementation is very different. For one
> thing, it doesn't replace the operation with column level operators
> in the parser. For another thing, it doesn't look up operators for
> each type, so the "identical" operator does not need to be
> implemented for each type to use it as shown above. It compares
> values byte-for-byte, after detoasting. The test for identical
> records can avoid the detoasting altogether for any values with
> different lengths, and it stops when it finds the first column with
> a difference.
>
> I toyed with the idea of supporting hashing of records using this
> operator, but could not see how that would be a performance win.
>
> The identical (===) and not identical (!==) operator names were
> chosen because of a vague similarity to the "exactly equals"
> concepts in JavaScript and PHP, which use that name. The semantics
> aren't quite the same, but it seemed close enough not to be too
> surprising. The additional operator names seemed natural to me
> based on the first two, but I'm not really that attached to these
> names for the operators if someone has a better idea.
>
> Since the comparison of record values is not documented (only
> comparisons involving row value constructors), it doesn't seem like
> we should document this special case. It is intended primarily for
> support of matview refresh and maintenance, and it seems likely
> that record comparison was not documented on the basis that it is
> intended primarily for support of such things as indexing and merge
> joins -- so leaving the new operators undocumented seems consistent
> with existing policy. I'm open to arguments that the policy should
> change.
>
> -
>

Wouldn't it be slightly less surprising / magical to not declare new
operators
but just new primitive functions? In the least invasive version they could
even
be called matview_is_record_identical or similar.

cheers,

Bene

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message MauMau 2013-09-13 08:00:58 Re: 9.4 HEAD: select() failed in postmaster
Previous Message Fabien COELHO 2013-09-13 06:51:29 Re: review: pgbench progress report improvements