Postgresql 如何生成一个随机的6位整数';它的加密能力强吗?

Postgresql 如何生成一个随机的6位整数';它的加密能力强吗?,postgresql,integer,type-conversion,bytea,Postgresql,Integer,Type Conversion,Bytea,我们需要一个函数,该函数给定的参数是三个字节,类型为bytea(由pgcrypto扩展名的gen_random_bytes函数生成),该函数返回一个随机的6位整数(包括0到999999之间)。6位整数应保留传递给函数的参数所给出的随机性。如果是3个字节,则取最后6个字符,前置'x',转换为位字符串,然后转换为int: select ('x' || right(gen_random_bytes(3)::text, 6))::bit(24)::int; 更多细节在类似的问题中:我可能过于复杂,但我

我们需要一个函数,该函数给定的参数是三个字节,类型为
bytea
(由
pgcrypto
扩展名的
gen_random_bytes
函数生成),该函数返回一个随机的6位整数(包括0到999999之间)。6位整数应保留传递给函数的参数所给出的随机性。

如果是3个字节,则取最后6个字符,前置
'x'
,转换为位字符串,然后转换为int:

select ('x' || right(gen_random_bytes(3)::text, 6))::bit(24)::int;

更多细节在类似的问题中:

我可能过于复杂,但我需要确保字符串中正好有n个数字。允许重复编号

SELECT string_agg(shuffle('0123456789')::char, '')
FROM generate_series(1, 6);
为了方便起见,我在这里复制了中提供的shuffle函数

create or replace function shuffle(text)
returns text language sql as $$
    select string_agg(ch, '')
    from (
        select substr($1, i, 1) ch
        from generate_series(1, length($1)) i
        order by random()
        ) s
$$;

可能会产生少于6位数的数据