@postgresdev

Как создать индекс в postgresql для view?

Выполняю:
create index idx_denormalized_account_user_products_account_id
on public.denormalized_account_user_products (account_id);

Выдает ошибку:
[42809] ERROR: "denormalized_account_user_products" is not a table or materialized view
  • Вопрос задан
  • 2441 просмотр
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Никак.
view не хранит никаких данных, а раз нет данных - то не по чему строить индекс.
Пример принципиальной проблемы индекса на view: если сделать view вида select foo, avg(bar) from tablename group by foo; - как пересчитывать данные при изменении строк в tablename?

Индекс может быть создан на материализованном представлении (materialized view) - потому что такое представление данные хранит непосредственно. Но обновлять эти данные требуется вручную запросом REFRESH MATERIALIZED VIEW, который выполнит запрос, запишет его результат в новый heap, затем заменит старый heap новым (если не указан concurrently) либо обновит несовпадающие строки (для concurrently)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы