我有一个用例,其中 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 或任意精度数,这可以允许动态声明对数基数和非线性数据的比例。
对于科学界和我们这些处理基于“波”的数据(如声音、振动、地震、光、辐射等)的人来说,这样的事情可能是一个巨大的胜利。这是基础的示例定义:
对数(底数,刻度)
-- 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)
);
如果有人有兴趣合作创建这样的东西,请告诉我。