BUG #18520: Different results when analyze a relation with UDT.
От | PG Bug reporting form |
---|---|
Тема | BUG #18520: Different results when analyze a relation with UDT. |
Дата | |
Msg-id | 18520-12e5636a81c059f2@postgresql.org обсуждение исходный текст |
Ответы |
Re: BUG #18520: Different results when analyze a relation with UDT.
|
Список | pgsql-bugs |
The following bug has been logged on the website: Bug reference: 18520 Logged by: zhou zhanghua Email address: 2467882606@qq.com PostgreSQL version: 17beta1 Operating system: Ubuntu 22.04 Description: When analyzing a relation with UDT, an error will be encountered if there is a join before the analyze stmts. Error message is "ERROR: missing support function 1(16386,16386) in opfamily 16392". to reproduce: ``` create type foo_type as (a float8, b float8); CREATE FUNCTION foo_type_less(foo_type, foo_type) RETURNS bool AS $$ SELECT true::boolean; $$ LANGUAGE SQL IMMUTABLE STRICT; CREATE OPERATOR < ( leftarg = foo_type, rightarg = foo_type, procedure = foo_type_less, commutator = >= ); CREATE FUNCTION foo_type_eq(foo_type, foo_type) RETURNS bool AS $$ SELECT false::boolean; $$ LANGUAGE SQL IMMUTABLE STRICT; CREATE OPERATOR = ( leftarg = foo_type, rightarg = foo_type, procedure = foo_type_eq, commutator = = ); CREATE OPERATOR CLASS foo_type_btreeopclass DEFAULT FOR TYPE foo_type using btree as OPERATOR 1 <; CREATE FUNCTION foo_type_hash(foo_type) RETURNS int4 AS $$ SELECT 1; $$ LANGUAGE SQL IMMUTABLE STRICT; CREATE OPERATOR CLASS foo_type_hashopclass DEFAULT FOR TYPE foo_type using hash as operator 1 = , function 1 foo_type_hash(foo_type); create table foo_type_table(a foo_type); insert into foo_type_table values ((1,2)),((3,4)),((5,6)); -- ERROR: missing support function BTORDER_PROC(foo_type,foo_type) in opfamily foo_type_btreeopclass select * from foo_type_table a, foo_type_table b where a.a = b.a; analyze foo_type_table; -- another session -- success analyze foo_type_table; ``` I tried to debug this different behavior, compute_scalar_stats is used when execute join before analyze, compute_trivial_stats is used when no join before analyze. This may because of the hash join load some thing into type cache, leading std_typanalyze choose different functions.
В списке pgsql-bugs по дате отправления: