给定一个这样的表:
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处理这个问题的方式。
1条答案
按热度按时间whitzsjs1#
根据answer in DBA stack exchange,没有任何保证。
我不想抄袭答案并复制在这里,但海报似乎提供了一个令人信服的例子来证明这种行为。