Postgres возвращает разные результаты, когда растровое сканирование отключено - PullRequest
0 голосов
/ 24 апреля 2020

Когда Postgres использует сканирование кучи растровых изображений для оценки запроса, включающего !, это дает мне другие результаты, чем при выполнении seqscan.

Кто-нибудь может пролить свет на это? Простое включение / отключение bitmapscan изменяет результаты запроса, что для меня похоже на ошибку. Есть ли обходные пути? Я нашел один для моего игрушечного запроса ниже (используя NOT), но для некоторых из сложных аргументов tsquery я не уверен, что смогу заставить это работать.

CREATE TABLE examples (content text);
CREATE INDEX ts_idx ON examples USING gin(to_tsvector('simple', content));
INSERT INTO examples VALUES ('Example with a word');

/* Incorrectly returns no results */
SET enable_seqscan = OFF;
SET enable_indexscan = OFF;
SET enable_bitmapscan = ON;
SELECT * FROM examples 
WHERE to_tsvector('simple', content) @@ to_tsquery('simple', '!(example<->word)')

/* Correctly returns results */ 
SET enable_seqscan = OFF;
SET enable_indexscan = OFF;
SET enable_bitmapscan = OFF; /* disabled */
SELECT * FROM examples 
WHERE to_tsvector('simple', content) @@ to_tsquery('simple', '!(example<->word)')

/* Also correctly returns results by using index and NOT keyword */ 
SET enable_seqscan = OFF;
SET enable_indexscan = OFF;
SET enable_bitmapscan = ON; /* enabled */
SELECT * FROM examples 
WHERE NOT to_tsvector('simple', content) @@ to_tsquery('simple', '(example<->word)')

/* Latest version of Postgres 11 */
SELECT VERSION();
/* PostgreSQL 11.7 (Ubuntu 11.7-0ubuntu0.19.10.1) on x86_64-pc-linux-gnu, 
compiled by gcc (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008, 64-bit */

1 Ответ

0 голосов
/ 27 апреля 2020

Было подтверждено, что это ошибка в Postgres <= 11,7, <= 12,2 и будет исправлена ​​в следующем минорном выпуске, за: </p>

https://www.postgresql.org/message-id/27773.1587773551%40sss.pgh.pa.us

С возможным патчем:

https://www.postgresql.org/message-id/16254.1587852873%40sss.pgh.pa.us

...