sql >> データベース >  >> RDS >> PostgreSQL

関数min(uuid)がpostgresqlに存在しません

    @ robin-salihの回答を信用したいと思います。これと、intのminの実装を使用して、次のコードを作成しました。

    CREATE OR REPLACE FUNCTION min(uuid, uuid)
    RETURNS uuid AS $$
    BEGIN
        IF $2 IS NULL OR $1 > $2 THEN
            RETURN $2;
        END IF;
    
        RETURN $1;
    END;
    $$ LANGUAGE plpgsql;
    
    
    create aggregate min(uuid) (
      sfunc = min,
      stype = uuid,
      combinefunc = min,
      parallel = safe,
      sortop = operator (<)
    );
    

    ほぼ同じですが、Bツリーインデックスを利用しているため、select min(id) from tbl 数ミリで動作します。

    追記 私はpgsqlの専門家ではありません。おそらく私のコードはどういうわけか間違っているので、本番環境で使用する前に再確認してください。ただし、インデックスと並列実行が正しく使用されていることを願っています。 PGの集計の背後にある理論を掘り下げるのではなく、サンプルコードから作成しました。



    1. PostgreSQLのlast_valueはnullを無視します

    2. MS-Accessレコードセットおよびクラスモジュール

    3. 数値を小数点以下2桁にフォーマットします

    4. oracle-クエリは同じですが、11gと12cではプランが異なります