1. ホーム
  2. postgresql

[解決済み] PostgreSQLのセッションIDに適したランダムな文字列はどのように作成するのですか?

2022-05-18 12:59:41

質問

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)