0

我在 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'

然后我收到此错误消息:

错误:关系“table1_pkey”的块 11729 中的无效页眉 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但是,当我添加子句时它怎么能运行?

4

1 回答 1

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'

结果应该是一样的。是的,这可能会导致性能下降,但应该不会很大。

于 2019-03-06T08:35:09.213 回答