我想要一个随机字符串用于使用Postgresql进行会话验证。我知道我可以得到一个随机数与SELECT random(),所以我尝试SELECT md5(random()),但是不工作。我如何做到这一点?
我建议这个简单的解决方案:
- 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)