Postgresql

為什麼沒有 max(uuid)/min(uuid) 函式?

  • December 22, 2021

為什麼我可以使用 UUID 對行進行排序:

SELECT uuid_nil()
ORDER BY 1;

但我無法計算最大值:

SELECT max(uuid_nil());

$$ 42883 $$錯誤:函式 max(uuid) 不存在

提示:沒有函式匹配給定的名稱和參數類型。您可能需要添加顯式類型轉換。

我知道我可以轉換為字元類型或ORDER BYand LIMIT 1。我只是好奇為什麼我必須使用解決方法。

我想說沒有人認為計算 UUID 的最大值有什麼用,我也看不到。

也就是說,如果你真的需要,它很容易CREATE AGGREGATE定義你自己的。max

我想這是一個疏忽。對我來說,你可以做>, greatest,leastorder 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 (>)
   );

引用自:https://dba.stackexchange.com/questions/275251