如何使用函数在PostgreSQL中生成随机唯一编号

时间:2014-04-07 09:29:52

标签: postgresql

在PostgreSQL中,如何为列生成随机唯一整数, 表格栏中没有退出的退货?

1 个答案:

答案 0 :(得分:12)

请参阅pseudo_encrypt函数,该函数基于Feistel network技术实现排列。结合postgres序列,可以保证结果的独特性,以及人眼的随机性。

例如:

create sequence seq maxvalue 2147483647;

create table tablename(
 id bigint default pseudo_encrypt(nextval('seq')::int),
 [other columns]
);

id的有效范围是0...2^32-1。如有必要,可以通过修改功能来调整。可以在pseudo_encrypt() function in plpgsql that takes bigint找到具有64位输出空间的变体。


编辑:pseudo_encrypt只实现一个排列,并且它不接受用户提供的密钥。如果您希望拥有自己的排列,则根据密钥,您可以考虑skip32(基于Skipjack的32位分组密码,10字节宽密钥)。

plpgsql函数(从Perl / C移植)可在以下位置获得: https://wiki.postgresql.org/wiki/Skip32