簡體   English   中英

為數據庫中的所有表生成 uuid

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM