有没有一种方法可以使序列具有自定义行为或类似功能?

时间:2019-04-30 15:53:41

标签: postgresql function generator sequence

我想创建一个为我提供随机值的序列。两个顺序调用应给出相似的值,这些值仅相差一点点(最大STEP)。就是说我想制作一个在随机方向上平滑变化的值序列。

我做了一个简单的功能,可以实现我想要的功能。但是问题是-它不能存储以前的值。

CREATE OR REPLACE FUNCTION smooth_random_integer(VAL INTEGER, STEP INTEGER, MIN INTEGER, MAX INTEGER) RETURNS INTEGER
    AS
    $rand_smooth_integer$
    BEGIN
        VAL := VAL + floor(random() * (STEP * 2 + 1) - STEP);
        IF VAL > MAX THEN
            RETURN MAX;
        ELSIF VAL < MIN THEN
            RETURN MIN;
        END IF;
        RETURN VAL;
    END;
    $rand_smooth_integer$ LANGUAGE plpgsql;

这意味着下面的插入产生非常相似的值,总是非常接近INITIAL变量。

INSERT INTO datapoint_values (ts, int_value)
    (SELECT ts, smooth_random_integer(INITIAL, STEP, MIN, MAX)
    FROM generate_series(TIMESTAMP_START, TIMESTAMP_END, TS_STEP) as ts);

如何重写代码以获得所需的输出?

我有个使用序列的想法。

postgresql序列的问题是它们1)具有稳定的已定义步骤,2)总是递增或递减。

有什么方法可以做我想要的吗?也欢迎使用除序列以外的其他工具。

编辑1:

MIN,MAX,STEP和INITIAL在脚本的开头定义。他们是整数。例如0、100、2、40。

generate_series(...)给出一个表,该表使用已定义的步骤TS_STEP从TIMESTAMP_START到TIMESTAMP_END生成时间戳。

0 个答案:

没有答案