Postgres错误:块xxx中的页面标题无效,但在与“ Order By”一起运行时很好

时间:2019-03-06 07:57:03

标签: database postgresql postgresql-8.2

我在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,由于内存不足或驱动器错误而导致错误“块xxx中的页眉无效”(链接:Postgres Database Error Invalid Page Header)。

但是,当我添加Order By条款时,它将如何运行?

1 个答案:

答案 0 :(得分:0)

我认为您的查询无法评估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'

结果应相同。是的,这可能会给性能带来损失,但这并不重要。