내 알고리즘은 정상적으로 작동하지만 새로운 큰 데이터베이스를 사용하면 내 정수 변수가 최대 제한 크기를 초과합니다. (나는 powerset 알고리즘을 사용한다 : https://www.postgresql.org/message-id/20060924054759.GA71934%40winnie.fuhr.org)Postgresql ERROR : 연산자가 존재하지 않습니다. bigint << bigint
그래서 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 < < BIGINT
,536,913 63,210
감사해야합니다! int2shl, int4shl, int8shl의 차이점은 무엇입니까? 그래서 모든 알고리즘을 수행해야합니까? 각 비교 연산자는 함수에서 변경해야합니까? –
업데이트 된 답변보기 – klin