On Thu, Sep 12, 2013 at 11:27 PM, Kevin Grittner <kgri...@ymail.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

Reply via email to