Создание частичного индекса существования JSONB-поля в Postgres дает мне PG :: ProgramLimitExceeded.Но почему? - PullRequest
0 голосов
/ 06 февраля 2019

Запрос SQL, который я хотел бы оптимизировать, добавив частичный индекс, выглядит следующим образом:

SELECT * FROM emails WHERE state ? 'failure'

Я пытаюсь создать частичный индекс для существования поля JSONB (здесь: state -> failure) в таблице базы данных Postgres.Инструкция SQL выглядит следующим образом:

CREATE INDEX "partial_index_failure_on_emails" ON "emails" ("state") WHERE (state ? 'failure')

Каждый раз, когда я пытаюсь выполнить инструкцию SQL для добавления этого индекса, база данных завершается с ошибкой:

PG::ProgramLimitExceeded: ERROR:  index row requires 13080 bytes, maximum size is 8191

У меня нетИдея, что может вызвать эту ошибку, так как результирующий индекс должен быть логическим, который определенно не требует более 8191 байта - даже не близко.

Чего мне не хватает?

Я также пыталсяиспользуйте аналогичное определение индекса, но это дает ту же ошибку:

CREATE INDEX "partial_index_failure_on_emails" ON "emails" ("state") WHERE (state -> 'failure') IS NOT NULL
...