postgresql - 避免在多台机器中 SERIAL 列重复递增

标签 postgresql database-design auto-increment

现在我在一台机器上安装了 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/

相关文章:

php - 如果通过 laravel5 pluck(lists) 方法创建,如何将字符串添加到数组键?

sql - 是否可以将 DDL 更改包装在 PostgreSQL 的事务中?

mysql - 数据库设计的性能: One database for n customers vs a database per customer

mysql - 按组自动递增

MySQL AUTO_INCRMENT 计数器出现一些问题

sql - 在不锁定表的情况下循环遍历 PL/PGSQL 中的 CURSOR

android - 我应该如何为 Android 应用程序存储个人资料照片数据库/服务器端?

Mysql 一张中间表多个相似表

database-design - Redis schema设计——传感器数据流的滑动窗口如何存储?

mysql - 如何使用自动递增字符创建自定义列