Функция pseudo_encrypt () в plpgsql, которая принимает bigint
Я работаю над системой, которая генерирует случайные идентификаторы, как в ответе № 2Вот.
Моя проблема в том, что упомянутоеpseudo_encrypt () функция работает с int, а не bigint. Я пытался переписать его, но он всегда возвращает один и тот же результат:
CREATE OR REPLACE FUNCTION pseudo_encrypt(VALUE bigint) returns bigint AS $
DECLARE
l1 bigint;
l2 int;
r1 bigint;
r2 int;
i int:=0;
BEGIN
l1:= (VALUE >> 32) & 4294967296::bigint;
r1:= VALUE & 4294967296;
WHILE i < 3 LOOP
l2 := r1;
r2 := l1 # ((((1366.0 * r1 + 150889) % 714025) / 714025.0) * 32767)::int;
l1 := l2;
r1 := r2;
i := i + 1;
END LOOP;
RETURN ((l1::bigint << 32) + r1);
END;
$ LANGUAGE plpgsql strict immutable;
Кто-нибудь может это проверить?