Postgres 错误:块 xxx 中的页面标题无效,但在使用 'Order By' 运行时很好



我在Postgres 8.2数据库(Windows)上运行此查询:

SELECT
    *
FROM
    (SELECT * FROM table1 tb1 WHERE date='2019-03-06' ) tb1
    JOIN table2 tb2 ON
        tb2.tb1_id = tb1.id
WHERE
    tb2.date ='2019-03-06'

然后我收到了此错误消息:

错误:关系的第11729页中的无效页面标头 " table1_pkey" sql状态:xx001

但是,当我添加Order By子句时,此查询运行良好。

SELECT
    *
FROM
    (SELECT * FROM table1 tb1 WHERE date='2019-03-06' ORDER BY id) tb1  
    JOIN table2 tb2 ON
        tb2.tb1_id = tb1.id
WHERE
    tb2.date = '2019-03-06'

afaik,错误" block xxx中的无效页面标头"主要是因为不良内存或不良驱动器(链接:Postgres数据库错误无效页面标题)。

但是,当我添加Order By子句时,它如何运行?

我认为您的查询在评估SELECT * FROM table1实际返回哪些列时很难,因此它不知道tb1.id是否存在并且是主要键。

当我看到您的查询时,您可以这样做一个简单的加入:

SELECT
    *
FROM
    table1 tb1  
JOIN 
    table2 tb2 ON tb2.tb1_id = tb1.id
WHERE
    tb2.date = '2019-03-06' AND tb1.date = '2019-03-06'

结果应该相同。是的,这可能会给性能带来惩罚,但不应该很重要。

相关内容

最新更新