sql - 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)
);
解决方案
但是,当我查询表的前 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
推荐阅读
- groovy - 如何将此修改后的数组分配给变量?
- bash - 按特定顺序解析文件名和重命名
- c - 每次收到新消息之前,如何刷新/清空 UART(RX)?
- php - 获取上周所有日期mysql
- javascript - 除加法 (+) 外,所有 JavaScript 算术运算符均有效
- java - 如何将 android 连接到本地服务器?
- html - HTML 电子邮件预标头图像 ALT 被忽略
- php - Laravel Eloquent:在 null 上调用成员函数 connection()
- c# - C# DrawString() 字母之间的空格
- python - Python。Django 休息框架。如何获得自定义 Json 响应?