我有一个用户定义的类型:
create type match_input as (
_values text[],
_name text,
_norm_fn text,
_operator text
);
我用它作为函数的输入参数:
get_matches(mi match_input)
我希望能够调用相同的函数,但为_values传递单个文本值。所以我定义了一个新类型:
create type match_input_simple as (
_values text,
_name text,
_norm_fn text,
_operator text
);
如果我尝试使用以下内容重载该函数:
create or replace function get_matches(_mis match_input_simple)
returns setof contact_index
as $func$
select get_matches((array[_mis._values], _mis._name,
_mis._norm_fn, _mis._operator)::match_input);
$func$
language sql strict;
该函数无需抱怨即可编译,但是当我运行该函数时,我收到此错误:
ERROR: function get_matches(record) is not unique
HINT: Could not choose a best candidate function. You might need to add explicit type casts.
所以看起来postgres在尝试决定运行哪个函数时,无法区分我的两种不同记录类型。 我不希望用户每次调用函数时都必须显式地键入转换记录,因为这样做会使尝试简化接口的目的失败。
答案 0 :(得分:0)
对类似功能的类型感到困惑。显式类型转换可能有所帮助。像
SELECT get_matches(val::match_input_simple)
或者
SELECT get_matches(val::match_input )
取决于val的类型
答案 1 :(得分:0)
没有施法就无法完成。
请记住,您可以拥有多个具有完全相同内容的类型,并为每个类型创建重载。数据库如何选择正确的类型和功能?