Запрос 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