给定一个这样的表:
CREATE TABLE the_table (
the_uuid UUID NOT NULL UNIQUE DEFAULT gen_random_uuid()
-- more columns
);
如果我们在
the_uuid
列中插入没有值的行,并且 DBMS 生成随机 UUID,postgres 是否可以无缝处理生成列中已存在的 UUID 的不太可能的情况?
有人会想象 postgres 可以重试随机 UUID 生成,直到它获得不违反约束的 UUID。但如果 postgres 不是以这种方式实现的,则需要在外部处理这个问题。
对于数字类型,我们有一个
SEQUENCE
的想法可以在一定程度上解决这个问题,但我不知道 UUID
类型的类似物。
这个问题的许多读者会想评论或回答说我担心一些不太可能发生的事情,我同意,但我仍然有兴趣更好地理解 postgres 处理这个问题的方式。
根据DBA堆栈交换中的答案,不,没有任何保证。
我不想抄袭答案并将其复制到这里,但海报似乎提供了一个令人信服的例子来证明这种行为。我自己没有尝试过。