Postgres 15分区表中bigserial列跨分区唯一性是否有保障?
问题解答:Postgres分区表中bigserial列的全局唯一性
核心结论
是的,你这个id列能够保证在所有分区中全局唯一。
具体解释
- bigserial的本质:
bigserial是Postgres的语法糖,等价于定义bigint类型列,并自动创建一个绑定的序列,插入数据时会自动调用序列的nextval()生成自增值。 - 分区表的序列共享逻辑:当在分区主表
T中定义bigserial时,Postgres只会为主表创建唯一的一个序列,所有子分区(比如T_2020、T_2021)在插入数据时,都会共用这个主表的序列来生成id值。不会为每个分区单独创建序列,因此不会出现不同分区生成重复id的情况。 - 复合主键的影响:虽然表的主键是复合的
(id, date),但这并不影响id列本身的全局唯一性——因为所有分区的id都来自同一个序列,天然不会重复,自然也满足复合主键的约束要求。
验证方式
你可以通过以下SQL查询绑定到id列的序列,确认它是主表的共享序列:
SELECT pg_get_serial_sequence('T', 'id');
执行后会返回类似public.t_id_seq的序列名称,这个序列就是所有分区共用的。
内容的提问来源于stack exchange,提问作者user3440012
相关产品推荐
相关产品推荐

