2016-06-13 5 views
0

Как видно из названия, я хочу иметь уникальный идентификатор в качестве первичного ключа, но по нескольким схемам. Я знаю о UUID, но это слишком дорого.Уникальный идентификатор в нескольких схемах

Есть ли способ работать с этим вокруг сериала?

+0

вы можете добавить столбец с идентификатором схемы и создать PK на двух столбцах. этот путь id будет серийным, но keypair всегда будет уникальным между схемами –

ответ

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 столбцов. «Последовательная последовательность» автоматически отбрасывается, если соответствующий столбец (или таблица) отбрасывается, что не является тем, что вы хотите с глобальной последовательностью.

Однако есть один недостаток: вы не можете убедиться, что дублирующиеся значения в этих двух таблицах вставлены вручную. Если вы хотите, чтобы последовательность была всегда используется для вставки значений, вы можете создать триггер, который всегда извлекает значение из последовательности.

Смежные вопросы