Меня удивляет, почему кому-то нужны такие ужасные имена таблиц, это можно сделать с помощью динамического 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
, который является допустимым идентификатором и не требует какой-либо специальной обработки.