Sql 带默认值的Postgres函数重载-我的函数是否不可调用?
假设我创建了两个这样的函数:Sql 带默认值的Postgres函数重载-我的函数是否不可调用?,sql,postgresql,overloading,Sql,Postgresql,Overloading,假设我创建了两个这样的函数: create function test() returns int as $$ select 1::int $$ language sql; create function test(int default 5) returns int as $$ select $1 $$ language sql; 如果我这样做: select * from test(); 我得到一个错误,说函数test()不是唯一的。有没有办法调用上面的第一
create function test() returns int
as
$$
select 1::int
$$
language sql;
create function test(int default 5) returns int
as
$$
select $1
$$
language sql;
如果我这样做:
select * from test();
我得到一个错误,说
函数test()不是唯一的
。有没有办法调用上面的第一个函数?类似地,如何使用默认值调用上面的第二个函数?否-没有方法,并且有文档记录:
具有参数默认值的函数被视为
匹配省略了0个或多个defaultable参数的任何调用
位置。如果有多个这样的函数与一个调用匹配,则
使用搜索路径中最早出现的如果有两个或多个
同一模式中具有相同参数类型的更多此类函数
在非默认位置(如果他们有
不同的默认参数集),系统将无法
确定要选择哪个,因此需要“不明确的函数调用”
如果找不到与调用更好的匹配项,将导致错误
我的 否-没有办法,而且有文件记录: 具有参数默认值的函数被视为 匹配省略了0个或多个defaultable参数的任何调用 位置。如果有多个这样的函数与一个调用匹配,则 使用搜索路径中最早出现的如果有两个或多个 同一模式中具有相同参数类型的更多此类函数 在非默认位置(如果他们有 不同的默认参数集),系统将无法 确定要选择哪个,因此需要“不明确的函数调用” 如果找不到与调用更好的匹配项,将导致错误
我的 我想在任何编程语言中都会遇到同样的问题。你希望使用哪一个函数?为什么,当两个函数都有相同的签名时?老实说,我在函数创建时预期postgres会出错…因为我没有得到一个,所以我认为我遗漏了一些东西,第一个函数在某种意义上仍然是“有效的”,我想在任何编程语言中都会遇到同样的问题。你希望使用哪一个函数?为什么,当两个函数都有相同的签名时?老实说,我在函数创建时预期postgres会出错……因为我没有得到一个,所以我认为我遗漏了一些东西,并且第一个函数在某种意义上仍然是“有效的”。