Postgresql 谢谢你纠正我@Patrick Small nit,V4 UUID是122位随机数,而不是128位随机数我想我可以连接random(),直到得到我想要的位数。哦,好吧。慢,不是随机的,也不是存储效率高。不是一个很好的会话ID解决方案,没有太多的随机性。答案也

Postgresql 谢谢你纠正我@Patrick Small nit,V4 UUID是122位随机数,而不是128位随机数我想我可以连接random(),直到得到我想要的位数。哦,好吧。慢,不是随机的,也不是存储效率高。不是一个很好的会话ID解决方案,没有太多的随机性。答案也,postgresql,random,Postgresql,Random,谢谢你纠正我@Patrick Small nit,V4 UUID是122位随机数,而不是128位随机数我想我可以连接random(),直到得到我想要的位数。哦,好吧。慢,不是随机的,也不是存储效率高。不是一个很好的会话ID解决方案,没有太多的随机性。答案也是6岁更快、更随机、更高效地存储在数据库中。速度慢、不随机或存储效率高。不是一个很好的会话ID解决方案,没有太多的随机性。答案也是6岁更快、更随机、更高效地存储在数据库中。@EvanCarroll:公平地说,gen\u random\u uui


谢谢你纠正我@Patrick Small nit,V4 UUID是122位随机数,而不是128位随机数我想我可以连接
random()
,直到得到我想要的位数。哦,好吧。慢,不是随机的,也不是存储效率高。不是一个很好的会话ID解决方案,没有太多的随机性。答案也是6岁更快、更随机、更高效地存储在数据库中。速度慢、不随机或存储效率高。不是一个很好的会话ID解决方案,没有太多的随机性。答案也是6岁更快、更随机、更高效地存储在数据库中。@EvanCarroll:公平地说,
gen\u random\u uuid()
出现在9.4版中,据我所知,该版本于2014年12月18日发布,比您否决的答案晚了一年多。额外的挑剔:答案只有3 1/2岁:-)但你是对的,现在我们有了
gen\u random\u uuid()
,这就是应该使用的。因此,我将对你的答案进行投票。部分错误:正确生成的随机UUID只有122个随机位,因为版本使用4位,变体使用2位:如果源代码不执行那里写的操作,那么它就不是UUID,也不应该被PostgreSQL这样调用。请注意,修剪+编码(例如base64)会移除熵,我对它进行了修改,以删除结果中有时出现的正斜杠和加号,并生成大写结果select upper(替换(替换(子字符串)(编码(解码)(md5(random():text),'hex')|解码(md5(random():text),'hex'),'base64'),0,10),'/','A'),'+','Z');我想知道如果散列的底层数据是随机的,
sha512
是否有任何好处。假设随机性,任何编码为字符串的东西都应该足够了,计算越简单越好(例如base64编码?)抱歉,旧评论,但在与某人讨论时出现work@JeffereyCave已经6年了,所以我不记得上下文了,但看起来OP询问的是会话ID,
sha512
的优点是比
md5
长4倍,因此a会更难?我同意时间越长越好。。。我想你的答案已经在
选择gen\u random\u bytes(1024)
中完成了。。是的。。。6年。和同事的随意谈话导致了这件事。
Create or replace function random_string(length integer) returns text as
$$
declare
  chars text[] := '{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}';
  result text := '';
  i integer := 0;
begin
  if length < 0 then
    raise exception 'Given length cannot be less than 0';
  end if;
  for i in 1..length loop
    result := result || chars[1+random()*(array_length(chars, 1)-1)];
  end loop;
  return result;
end;
$$ language plpgsql;
select random_string(15);
select random_string(15) from generate_series(1,15);

  random_string
-----------------
 5emZKMYUB9C2vT6
 3i4JfnKraWduR0J
 R5xEfIZEllNynJR
 tMAxfql0iMWMIxM
 aPSYd7pDLcyibl2
 3fPDd54P5llb84Z
 VeywDb53oQfn9GZ
 BJGaXtfaIkN4NV8
 w1mvxzX33NTiBby
 knI1Opt4QDonHCJ
 P9KC5IBcLE0owBQ
 vvEEwc4qfV4VJLg
 ckpwwuG8YbMYQJi
 rFf6TchXTO3XsLs
 axdQvaLBitm6SDP
(15 rows)
template1=> SELECT array_to_string(ARRAY(SELECT chr((65 + round(random() * 25)) :: integer) FROM generate_series(1,12)), '');
 array_to_string
-----------------
 TFBEGODDVTDM

template1=> SELECT array_to_string(ARRAY(SELECT chr((48 + round(random() * 9)) :: integer) FROM generate_series(1,12)), '');
 array_to_string
-----------------
 868778103681
SELECT md5(random()::text);
SELECT array_to_string(array 
       ( 
              select substr('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', trunc(random() * 62)::integer + 1, 1)
              FROM   generate_series(1, 12)), '');
CREATE OR REPLACE FUNCTION random_string(INTEGER)
RETURNS TEXT AS
$BODY$
SELECT array_to_string(
    ARRAY (
        SELECT substring(
            '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
            FROM (ceil(random()*62))::int FOR 1
        )
        FROM generate_series(1, $1)
    ), 
    ''
)
$BODY$
LANGUAGE sql VOLATILE;
select gen_salt('md5') from generate_series(1,4);

 gen_salt
-----------
$1$M.QRlF4U
$1$cv7bNJDM
$1$av34779p
$1$ZQkrCXHD
create extension if not exists pgcrypto;
select digest(gen_random_bytes(1024), 'sha512');
select encode(decode(md5(random()::text), 'hex')||decode(md5(random()::text), 'hex'), 'base64')
SELECT string_agg (substr('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', ceil (random() * 62)::integer, 1), '')
FROM   generate_series(1, 45);
CREATE EXTENSION pgcrypto;
SELECT gen_random_uuid();

           gen_random_uuid            
--------------------------------------
 202ed325-b8b1-477f-8494-02475973a28f
create extension if not exists pgcrypto;
SELECT encode(gen_random_bytes(20),'base64')
SELECT encode(gen_random_bytes(20),'hex')