【问题标题】:Is this a postgresql bug? Only one row can not query by equal but can query by like这是一个postgresql错误吗?只有一行不能equal查询但可以like查询
【发布时间】:2019-11-05 20:06:39
【问题描述】:

我有一张表,这个表中只有一行不能用equal查询,但是可以用like(不是incloud %)查询。

postgresql 服务器版本:90513

# select id,external_id,username,external_id from users where username = 'oFIC94vdidrrKHpi5lc1_2Ibv-OA';
 id | external_id | username | external_id 
----+-------------+----------+-------------
(0 rows)

# select id,external_id,username,external_id from users where username like 'oFIC94vdidrrKHpi5lc1_2Ibv-OA';
                  id                  |         external_id          |           username           |         external_id          
--------------------------------------+------------------------------+------------------------------+------------------------------
 61ebea19-74f5-4713-9a30-63eb5af8ac8f | oFIC94vdidrrKHpi5lc1_2Ibv-OA | oFIC94vdidrrKHpi5lc1_2Ibv-OA | oFIC94vdidrrKHpi5lc1_2Ibv-OA
(1 row)

如果我转储此表并恢复它,它将被修复。为什么。

这是一个 postgresql 错误?我该如何解决它。我见过两次。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    你有这个表的索引吗?如果是,这看起来像是损坏的索引 - PostgreSQL 在第一种情况下使用索引,如果索引损坏,它可能不会返回任何结果。

    这通常是软件错误或硬件错误(断电导致数据丢失或任何内存问题)。尝试删除并重新创建索引,或使用https://www.postgresql.org/docs/9.3/sql-reindex.html 重新构建它

    【讨论】:

    • 是的,这是一个损坏的索引错误。我重建索引修复了它。
    • 可能是 PostgreSQL 代码库中的错误,也可能是硬件故障。确保在测试和确定备份时保留常规(工作和测试)备份的历史记录。标准的 btree 索引代码将被数百万 PostgreSQL 用户使用,但您的硬件仅供您使用,所以我会首先怀疑硬件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2010-12-30
    • 2021-02-20
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多