2016-06-13 9 views
0

タイトルが示唆しているように、主キーとしてではなく複数のスキーマにわたって一意のIDを持つことを望みます。私はUUIDについて知っていますが、それはあまりにも高価です。複数のスキーマ内の一意の識別子

これをシリアルで処理する方法はありますか?

+0

スキーマIDを持つ列を追加し、2つの列に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列で使われている「知らない」ということ、です。対応する列(またはテーブル)が削除された場合、グローバルシーケンスでは不要な「シリアルシーケンス」が自動的にドロップされます。

しかし、1つの欠点があります。これらの2つのテーブルの重複値が手動で挿入されることを確認することはできません。シーケンスがの値を挿入するために常にであることを確認したい場合は、シーケンスから常に値をフェッチするトリガーを作成できます。

関連する問題