2016-06-13 55 views
0

正如標題所示,我希望將唯一標識符作爲主鍵,但要覆蓋多個模式。我知道UUID,但它太昂貴了。多個模式中的唯一標識符

有沒有什麼辦法解決這個問題?

+0

您可以添加具有模式ID的列並在兩列上創建PK。這種方式ID將是串行的,但密鑰對在模式之間總是唯一的 –

回答

1

您可以創建一個全局序列,並在您的表中使用該序列,而不是使用serial列創建的自動序列。

create schema global; 
create schema s1; 
create schema s2; 

create sequence global.unique_id; 

create table s1.t1 
(
    id integer default nextval('global.unique_id') primary key 
); 

create table s2.t1 
(
    id integer default nextval('global.unique_id') primary key 
); 

serial列不同的是,該序列unique_id並不「知道」它的使用由id列。如果相應的列(或表)被刪除,那麼「序列序列」將自動丟棄,這不是您想要的全局序列。

但有一個缺點:您無法確保手動插入這兩個表中的重複值。如果你想確保序列是總是用來插入值,你可以創建一個總是從序列中獲取一個值的觸發器。