[英]Generate uuid for all the tables in a database
我正在開發一個項目,在該項目中我需要使用 UUID 作為表名生成一組動態表。 所有在線材料都有助於為表中的列生成 UUID,但不會為表生成 UUID。
請幫助我解決這個問題。
謝謝。
如果我理解正確,您需要將每個表名重命名為 UUID。 為此,請運行:
ALTER TABLE table_name RENAME TO uuid_generate_v1();
我不明白為什么有人會想要這樣可怕的表名,這可以使用動態 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;
$$
;
format()
函數的%I
占位符負責正確引用那些可怕的名字。
由於 UUID 不是有效的 SQL 標識符,因此您現在必須在訪問表時使用雙引號,例如:
select *
from "2dc9502b-1e49-4c6f-9675-71a900dabc91";
一個稍微好一點的版本是通過將所有-
替換為_
並使用字符前綴(因為 SQL 標識符不允許以數字開頭)來將 UUID 轉換為有效標識符,以便整個名稱成為有效標識符不需要那些可怕的雙引號:
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
這是一個有效的標識符,不需要任何特殊處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.