Генерация uuid для всех таблиц в базе данных - PullRequest
0 голосов
/ 13 февраля 2019

Я работаю над проектом, в котором мне нужно сгенерировать набор динамических таблиц, используя UUID в качестве имени таблицы.Весь онлайн-материал помогает генерировать UUID для столбца в таблице, но не для таблицы.

Просьба помочь мне в решении проблемы.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

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

0 голосов
/ 13 февраля 2019

Если я правильно понимаю, вам нужно переименовать каждое имя таблицы в UUID.Для этого выполните:

ALTER TABLE table_name RENAME TO uuid_generate_v1();
...