生成唯一的随机字符串,用作 PostgreSQL 中新创建的行内字段的值

W.M*_*.M. 1 postgresql stored-procedures insert random functions

我有这个生成随机字符串的语句:

SELECT string_agg (substr('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', ceil (random() * 62)::integer, 1), '')
FROM generate_series(1, 20);
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何在函数内实现此功能,该函数会将上述语句的值自动分配给url_prefix创建新记录时命名的字段(on INSERT's)?

Jac*_*las 6

您可以创建一个函数并将其用作该列的默认函数:

create function f() returns text language sql as $$
  SELECT string_agg (substr('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', ceil (random() * 62)::integer, 1), '')
  FROM generate_series(1, 20)
$$;

create table foo(id serial primary key, url_prefix text not null default f());

insert into foo default values;
Run Code Online (Sandbox Code Playgroud)
select * from foo;
Run Code Online (Sandbox Code Playgroud)
编号 | 网址前缀          
-: | :--------------------
 1 | iByDaJ2h4JHi3dI3uBoy

db<>在这里摆弄