首页 > 解决方案 > PostgreSQL 序列无序升序

问题描述

通过 SQL Alchemy 将数据插入 Postgres 表时,我遇到了序列问题。

所有数据都插入良好,该id BIGSERIAL PRIMARY KEY列具有所有唯一值,这很棒。

但是,当我查询表的前 10/20 行等时,这些id值不是按数字顺序升序的。序列中有间隙,很好,这是可以预料的,我的意思是行将随机通过值而不是像这样升序:

id
15
22
16
833
30
etc...

我已经浏览了很多关于此的 SO 和 Postgres 论坛帖子,并且只发现人们在谈论他们的序列中有巨大的连续间隙,而不是在创建时不正确的升序

示例截图:

在此处输入图像描述

在此处输入图像描述

表本身是通过标准 DDL 语句创建的,如下所示:

CREATE TABLE IF NOT EXISTS schema.table_name (
  id                  BIGSERIAL                                   NOT NULL,
  col1                text                                        NOT NULL,
  col2                JSONB[]                                     NOT NULL,
  etc....
  PRIMARY KEY (id)
);

标签: sqlpostgresqlsqlalchemysql-order-by

解决方案


但是,当我查询表的前 10/20 行等时

您的查询没有order by子句,因此您没有选择表的第一行,只是一组未定义的行。

使用order by- 你会发现序列号确实是按升序分配的(可能有间隙):

select id from ht_data order by id limit 30

为了实际检查序列的顺序,您实际上需要另一列来存储每行创建时的时间戳。然后你可以这样做:

select id from ht_data order by ts limit 30

推荐阅读