为数据库中的所有表生成uuid

时间:2019-02-13 06:18:40

标签: postgresql ddl

我正在一个项目中,我需要使用UUID作为表名来生成一组动态表。所有在线材料都有助于为表中的列而不是表中的列生成UUID。

请帮助我解决这个问题。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果我正确理解,则需要将每个表名重命名为UUID。为此,请运行:

ALTER TABLE table_name RENAME TO uuid_generate_v1();

答案 1 :(得分:0)

让我感到困惑的是,为什么有人会想要这样可怕的表名,这可以使用动态SQL来完成。

do
$$
declare
  l_count integer;
begin
  for l_count in 1..5 loop
    execute format('create table %I (id integer primary key)', uuid_generate_v4());
  end loop;
end;
$$
;    

%I函数的format()占位符负责正确引用那些可怕的名称。

由于UUID不是有效的SQL标识符,您现在每次访问表时都必须使用双引号,例如:

select * 
from "2dc9502b-1e49-4c6f-9675-71a900dabc91";

一个更好的版本是将UUID转换为有效标识符,方法是将所有-替换为_并使用字符前缀(因为SQL标识符不允许以数字),这样整个名称就成为有效的标识符,不需要那些令人讨厌的双引号:

do
$$
declare
  l_count integer;
begin
  for l_count in 1..5 loop
    execute format('create table %I (id integer primary key)', 't_'||replace(uuid_generate_v4()::text, '-', '_'));
  end loop;
end;
$$
; 

上面创建的名称类似:t_2b526a62_a6bc_4c3a_bd52_f0db050c485c,它是一个有效的标识符,不需要任何特殊处理。