我想创建一个随机字符串,用于使用PostgreSQL进行会话验证.我知道我可以得到一个SELECT random()的随机数,所以我try 了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)

Postgresql相关问答推荐

将几个左连接合并为一个

读取扩展坞合成中的UDP:IO/超时

在Docker容器内的Postgres,如何通过Promail将JSON登录到Loki?

哪种数据类型是除法的结果?

在Postgres游标中从一行变量中减go 另一行变量

具有有限字母表的自定义字符串类型

Postgres 查询指向国外数据工作者的分区表比直接查询 fdw 慢很多倍

Heroku Rails 4 无法连接到服务器:connection refused

PostgreSQL 错误:42P01:relation "[Table]" does not exist

Django 1.8 数组字段追加和扩展

使用 ON CONFLICT 从 INSERT 返回行,无需更新

更新列或列或列时触发触发

Postgres 图像未创建数据库

如何检索 PostgreSQL 数据库的 comments ?

statement_date列是日期类型,但表达式是整数类型

使用 current_setting() 判断值

Django 1.9.2 AssertionError:database connection isn't set to UTC

在 PostgreSQL 中将列数据类型从 Text 更改为 Integer

防止 PostgreSQL 中的递归触发器

Postgresql 对象 ID 和元组