Re: BUG #18705: Segmentation fault when create brin index on user-defined type. - Mailing list pgsql-bugs

From Tomas Vondra
Subject Re: BUG #18705: Segmentation fault when create brin index on user-defined type.
Date
Msg-id ec61c89f-6d2a-46b0-9746-4646ef7c5060@vondra.me
Whole thread Raw
In response to BUG #18705: Segmentation fault when create brin index on user-defined type.  (PG Bug reporting form <noreply@postgresql.org>)
Responses Re: BUG #18705: Segmentation fault when create brin index on user-defined type.
List pgsql-bugs
On 11/14/24 03:40, PG Bug reporting form wrote:
> ...
>
> CREATE OPERATOR CLASS sva_special_ops FOR TYPE text using brin AS OPERATOR 1
> <#,
> OPERATOR 2 <=#, OPERATOR 3 >=#, OPERATOR 4 >#, function 1
> si_same(text,text);
> CREATE INDEX idx_special1 ON t_sva using brin(sva sva_special_ops);
> 

I think this is a bit confused about CREATE OPERATOR CLASS. For BRIN
indexes this expects these 4 functions:

Support Function 1     internal function brin_minmax_opcinfo()
Support Function 2     internal function brin_minmax_add_value()
Support Function 3     internal function brin_minmax_consistent()
Support Function 4     internal function brin_minmax_union()

No wonder it crashes if CREATE OPERATOR CLASS passes si_same() instead
of brin_minmax_opcinfo.

The operators seem a bit off too, because there's no 'equality'
operator, and if I add '=#' as equality operator, then this seems to
work for me:

CREATE OPERATOR CLASS sva_special_ops FOR TYPE text using brin AS
  FUNCTION 1 brin_minmax_opcinfo(internal),
  FUNCTION 2 brin_minmax_add_value(internal, internal, internal, internal),
  FUNCTION 3 brin_minmax_consistent(internal, internal, internal),
  FUNCTION 4 brin_minmax_union(internal, internal, internal),
  OPERATOR 1 <#,
  OPERATOR 2 <=#,
  OPERATOR 3 =#,
  OPERATOR 4 >=#,
  OPERATOR 5 >#;



regards

-- 
Tomas Vondra




pgsql-bugs by date:

Previous
From: [3반]김민지_4904
Date:
Subject: Sorting Discrepancy in PostgreSQL 14.13
Next
From: Aleksander Alekseev
Date:
Subject: Re: Libpq library error when doing physical Replication