1

PostgreSQL データベースのカスタム基本型が非線形データの処理に非常に役立つユース ケースがあります。この例には、C 関数への入出力関数の使用の定義が含まれます。私の場合、SQL を使用して inp 関数と out 関数を定義し、「LIKE」を使用して倍精度から他のすべてを継承したいと考えています。誰かがこれをしましたか?それは可能ですか?

考えられる例:

-- sample linear to logrithmic functions
CREATE FUNCTION to_linear(anyelement) RETURNS double precision
    LANGUAGE SQL
AS
$$
SELECT CASE WHEN $1 > 0 THEN 30 / log($1::double precision) ELSE 0 END
$$;

create function to_log(anyelement) returns double precision
    language sql
as $$
select 10^($1::double precision/30.0);
$$;

-- create the base type
create type mylogdata
(

    INPUT = to_linear,
    OUTPUT = to_log,
    LIKE = double precision
) ;

-- sample use in a table definition 
CREATE TABLE test_table(
    mydata mylogdata
);

私が本当に求めているのは、「sudo」または「部分的な」基本型であり、既存の関数 (合計、平均など) が継承された型 (この場合、倍精度); 基本的に、Cで関数を書いたり書き直したりすることを避けています。

考え?アイデア?コメント? ありえない?:)

どうもありがとう!


余談ですが、「C」ルートをたどった場合、Char、Varchar、または Arbitrary Precision Number のような、より一般的な対数スカラー/ベース型を作成する機会があると思います。非線形データの対数底とスケールの動的宣言。

このようなものは、科学コミュニティと、音、振動、地震、光、放射線などの「波」ベースのデータを扱う私たちにとって大きな勝利になる可能性があります。ベースのサンプル定義は次のとおりです。

対数(底、目盛)

-- Below my idea for use in a table definition 
-- Obviously the IN/OUT functions would have to be modified to use the base and scaling
-- as defined (  most likely in C ??  )

CREATE TABLE test_table
(
    mydata logarithmic(10, 30)
);

このようなものを作成するために提携することに誰かが興味を持っている場合は、私に知らせてください.

4

1 に答える 1

0

新しい型の入力関数と出力関数を使用してデータ型を記述したい場合は、それを C で記述する必要がありますdouble precision

しかし、私は反対に行きます。数値のように見える型を持つのではなく、既知の算術演算子が奇妙に動作するのではなく、既存のデータ型に対して新しい一連の演算子を定義します。これは SQL で行うことができ、私にはより自然に感じられます。

新しい演算子の演算子クラスを作成すると、それらをインデックスで使用することもできます。

于 2020-02-21T07:37:40.057 に答える