On 11/15/24 07:17, Tender Wang wrote:
>
>
> Tomas Vondra <tomas@vondra.me <mailto:tomas@vondra.me>> 于2024年11月14日
> 周四 21:48写道:
>
> 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.
>
>
> Can we report errors not crash if users pass an unexpected function?
>
I think it might be improved to do some checks, yes. The CREATE OPERATOR
CLASS should be able to signatures of the functions - it's AM-specific,
and there's a limit how much can be checked. For example these functions
have "internal" arguments, which can be an arbitrary pointer.
That being said, I'm not aware of anyone working on such checks. Might
be a nice first patch, though.
regards
--
Tomas Vondra