首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PostgreSQL中创建适合会话ID的随机字符串?

如何在PostgreSQL中创建适合会话ID的随机字符串?
EN

Stack Overflow用户
提问于 2010-10-20 01:05:03
回答 9查看 105.3K关注 0票数 114

我想生成一个随机字符串,用于使用PostgreSQL进行会话验证。我知道我可以用SELECT random()得到一个随机数,所以我尝试了SELECT md5(random()),但这不起作用。我该怎么做呢?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-10-20 05:34:14

我建议这个简单的解决方案:

这是一个非常简单的函数,它返回给定长度的随机字符串:

代码语言:javascript
运行
复制
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;

和用法:

代码语言:javascript
运行
复制
select random_string(15);

输出示例:

代码语言:javascript
运行
复制
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)
票数 105
EN

Stack Overflow用户

发布于 2010-12-31 05:57:33

您可以像这样修复您的初始尝试:

代码语言:javascript
运行
复制
SELECT md5(random()::text);

比其他一些建议简单得多。:-)

票数 265
EN

Stack Overflow用户

发布于 2011-03-30 04:49:34

在Marcin的解决方案的基础上,您可以使用任意字母表(在本例中为所有62个ASCII字母数字字符):

代码语言:javascript
运行
复制
SELECT array_to_string(array 
       ( 
              select substr('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', trunc(random() * 62)::integer + 1, 1)
              FROM   generate_series(1, 12)), '');
票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3970795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档