Ошибка Postgres: неверный заголовок страницы в блоке xxx, но отлично при запуске с 'Order By' - PullRequest
0 голосов
/ 06 марта 2019

Я выполняю этот запрос в базе данных 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": 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, ошибка «неверный заголовок страницы в блоке ххх», главным образом из-за плохой памяти или плохого диска (ссылка: Ошибка базы данных Postgres Неверный заголовок страницы ).

Но как это может работать, когда я добавляю предложение Order By?

1 Ответ

0 голосов
/ 06 марта 2019

Я думаю, что ваш запрос не может оценить, какие столбцы на самом деле возвращаются 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'

Результаты должны быть одинаковыми. Да, это может привести к снижению производительности, но оно не должно быть значительным.

...