给定这样一张表:
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可能处理此问题的方式。
gen_random_uuid()
生成的值已经存在于数据库中,将会抛出“重复键”违规错误。顺序(sequence)并不能解决这个问题。 - user330315