PostgreSQL自动化id可扩展吗



我是SQL的新手,我来自NoSQL。

我已经看到,如果你想使用唯一的id,你需要为你的行创建一个唯一的id。它们不是像在MongoDB中那样由数据库自动生成的。一种方法是创建自动递增的id。

PostgreSQL自动递增id是否可扩展?DB是否必须一次插入一行?它是如何工作的?

-----编辑--------

我真正想知道的是,在分布式环境中,是否存在两行可能具有相同id的风险?

在Postgres中,autoincrement是原子的并且可扩展的。在某些插入失败的情况下,序列中可能缺少某些ID,但插入的ID保证是唯一的。

此外,不必生成所有主键。看看我对你第一个问题的回答。

自动递增定义为的列

id bigint PRIMARY KEY DEFAULT nextval('tab_id_seq')

或者,更符合标准,如

id bigint PRIMARY KEY GENERATED ALWAYS AS IDENTITY

使用序列生成唯一值。

序列是一个特殊的数据库对象,它可以非常有效地为并发数据库会话提供唯一整数。我怀疑任何身份生成器,无论是在MongoDB还是其他地方,都能更高效。

由于获取新的序列值访问共享状态,因此可以通过定义CACHE值高于1的序列来优化高并发性序列。然后,使用序列的每个数据库会话都会保留一个唯一值的缓存,并且不必在每次需要值时访问共享状态。

最新更新