Postgresql
為什麼沒有 max(uuid)/min(uuid) 函式?
為什麼我可以使用 UUID 對行進行排序:
SELECT uuid_nil() ORDER BY 1;
但我無法計算最大值:
SELECT max(uuid_nil());
$$ 42883 $$錯誤:函式 max(uuid) 不存在
提示:沒有函式匹配給定的名稱和參數類型。您可能需要添加顯式類型轉換。
我知道我可以轉換為字元類型或
ORDER BY
andLIMIT 1
。我只是好奇為什麼我必須使用解決方法。
我想說沒有人認為計算 UUID 的最大值有什麼用,我也看不到。
也就是說,如果你真的需要,它很容易
CREATE AGGREGATE
定義你自己的。max
我想這是一個疏忽。對我來說,你可以做
>
,greatest
,least
等order by
但不能做min
/沒有任何意義max
。這絕對是違反直覺的,而不是人們所期望的。我像這樣為我定義它們:
create or replace 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 or replace 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 (>) );