xeh*_*puk 7 postgresql max uuid postgresql-10
为什么我可以使用 UUID 对行进行排序:
SELECT uuid_nil()
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud)
但我无法计算最大值:
SELECT max(uuid_nil());
Run Code Online (Sandbox Code Playgroud)
[42883] 错误:函数 max(uuid) 不存在
提示:没有函数与给定名称和参数类型匹配。您可能需要添加显式类型转换。
我知道我可以转换为字符类型 orORDER BY和LIMIT 1。我只是好奇为什么我必须使用解决方法。
我想这是一个疏忽。>对我来说,你可以做、greatest、等least,order by但不做min/没有任何意义max。这绝对是违反直觉的,也不是人们所期望的。
我这样定义它们:
create function min(uuid, uuid)
returns uuid
immutable parallel safe
language plpgsql as
$$
begin
return least($1, $2);
end
$$;
create aggregate min(uuid) (
sfunc = min,
stype = uuid,
combinefunc = min,
parallel = safe,
sortop = operator (<)
);
create function max(uuid, uuid)
returns uuid
immutable parallel safe
language plpgsql as
$$
begin
return greatest($1, $2);
end
$$;
create aggregate max(uuid) (
sfunc = max,
stype = uuid,
combinefunc = max,
parallel = safe,
sortop = operator (>)
);
Run Code Online (Sandbox Code Playgroud)
如果您希望这是幂等迁移的一部分,您需要确保这些函数不存在:
drop aggregate if exists max(uuid);
drop aggregate if exists min(uuid);
drop function if exists min(uuid, uuid);
drop function if exists max(uuid, uuid);
Run Code Online (Sandbox Code Playgroud)