小编Yeg*_*ash的帖子

主键的顺序扫描和索引扫描返回不同的行

我的表中的数据有问题users.该表的主键定义为:

"primary_c26a3d1a9d1c7aa4bb0a8d6b752c01a7" PRIMARY KEY, btree (id)
Run Code Online (Sandbox Code Playgroud)

当我使用WITH子句强制对表进行顺序扫描时,我发现重复的ID:

=> WITH temp_table AS (select * from "users") SELECT id from temp_table group by id having count(id) > 1;
-[ RECORD 1 ]
id | 8225700
-[ RECORD 2 ]
id | 8225682
...
Run Code Online (Sandbox Code Playgroud)

这是怎么发生的?如果我通过索引搜索这些重复项,我没有同样的问题:

=> select count(*) from users where id = 8225700;
-[ RECORD 1 ]
count | 1
Run Code Online (Sandbox Code Playgroud)

我正在使用PostgreSQL 9.1.

VACUUM没有帮助我.我试图通过ctid删除重复项:

// good and bad rows
> with usrs as (select ctid, * from users) select …
Run Code Online (Sandbox Code Playgroud)

sql postgresql

17
推荐指数
1
解决办法
750
查看次数

标签 统计

postgresql ×1

sql ×1