Postgres文本列比较错误

时间:2017-12-01 09:01:16

标签: sql postgresql

我正在使用Postgres 9.2.24

今天我发现了一些令人困惑的事情。

我有一个带有文本列的表,并且表中有两条记录具有保存列值。

这两个值具有相同的md5值。

但是当我使用=运算符时,我只能得到一个值。但如果我和%一样使用,我可以得到两个值。

有谁知道为什么?

erp_number列数据类型为文本

使用就像我们可以得到两个记录

select  md5(erp_number) 
from _order 
where owner_id = 36700 
and erp_number  like  '%北京20171130DFCX'

返回:

a0630e878a08c692b0d3ddc7cf3907b4
a0630e878a08c692b0d3ddc7cf3907b4

like '%北京20171130DFCX' or like '北京20171130DFCX%' or like '%北京20171130DFCX'  

我也可以获得相同的行。似乎%的位置无关紧要。

但如果我使用=,我可以获得一条记录

select  erp_number 
from  _order 
where owner_id = 36700 
and erp_number  =  '北京20171130DFCX'

返回

a0630e878a08c692b0d3ddc7cf3907b4

1 个答案:

答案 0 :(得分:0)

大多数情况下,此类影响是由损坏的索引引起的。你可以通过查询禁用索引来检查是否是这样:

set enable_bitmapscan = off; 
set enable_indexscan to off;

如果您发现效果因“索引已禁用”而消失 跑吧

reindex table_name;

还花一些时间来确定索引是如何被破坏的。

谢谢,Lukasz对enable_bitmapscan

发表评论