现在我在一台机器上安装了 Postgres 并创建了一个包含 serial
列的表。只要插入新行,此列就会自动递增。如果我在另一台机器上安装 Postgres 进行分布式计算并使用 serial
列创建相同的表,serial
列从 1 开始?或者我可以为该列设置最小值(第一台机器的最大值 + 1)吗?
最佳答案
默认情况下,SERIAL
创建一个以 one 开头的 SEQUENCE
。
如果需要,您可以修改序列,使每台机器都有一个不同的起始值,并且所有序列在创建表后都有一个偏移量。例如,ALTER SEQUENCE the_sequence_name START WITH 2 INCREMENT BY 10
。为每台机器提供不同的 START WITH
值,并确保它们都具有相同 INCREMENT BY
。这样每台机器都可以保证获得唯一的 ID。
如果执行此操作,您可能希望使用 bigint
键列,并分配一个较大的偏移量,例如 INCREMENT BY 1000
。这样,当您必须添加机器 #11 时,您就不会感到痛苦。
另一种选择是使用 uuid
主键。
关于postgresql - 避免在多台机器中 SERIAL 列重复递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22419770/