【发布时间】:2018-05-05 10:45:33
【问题描述】:
我的算法运行良好,但使用新的大型数据库时,我的整数变量超过了最大限制大小。 (我使用powerset算法:https://www.postgresql.org/message-id/20060924054759.GA71934%40winnie.fuhr.org)
所以我决定把我所有的整数都改成 bigint,但是现在比较运算符有问题了……我不知道如何管理它:
CREATE OR REPLACE FUNCTION powerset(a anyarray)
RETURNS SETOF anyarray AS
$BODY$
DECLARE
retval a%TYPE;
alower bigint := array_lower(a, 1);
aupper bigint := array_upper(a, 1);
j bigint;
k bigint;
BEGIN
FOR i IN 1 .. COALESCE((CAST(1 AS BIGINT) << (aupper - alower + 1)) - 1, 0) LOOP
retval := '{}';
j := alower;
k := i;
WHILE k > CAST(0 AS BIGINT) LOOP
IF k & CAST(1 AS BIGINT) = CAST(1 AS BIGINT) THEN
retval := array_append(retval, a[j]);
END IF;
j := j + CAST(1 AS BIGINT);
k := k >> CAST(1 AS BIGINT);
END LOOP;
RETURN NEXT retval;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE plpgsql IMMUTABLE STRICT
COST 100
ROWS 1000;
ALTER FUNCTION powerset(anyarray)
OWNER TO postgres;
我在网上遇到了错误:
FOR i IN 1 .. COALESCE((CAST(1 AS BIGINT) << (aupper - alower + 1)) - 1, 0) LOOP
错误 42883 Postgresql 错误:运算符不存在:bigint
【问题讨论】:
标签: postgresql comparison comparison-operators bigint