Класс Volatile EquivalenceClass не имеет sortref

#postgresql

#postgresql

Вопрос:

Я запускаю: PostgreSQL 9.0.3 (последняя стабильная версия Debian)

Этот запрос:

ВЫБЕРИТЕ * Из sis.thread_categories stc, sis.threads st ГДЕ st.id_thread_categories=stc.id

=> выбрасывает:

ОШИБКА: класс volatile EquivalenceClass не имеет состояния sortref SQL: XX000

Та же проблема возникла, когда я попробовал это с помощью JOIN. Кто-нибудь знает, что я делаю не так?

Ответ №1:

Я думаю, у вас может быть повреждена база данных, чего не должно произойти. Из backend/optimizer/path/pathkeys.c исходного кода PostgreSQL:

 List *
convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel,
                                                  List *subquery_pathkeys)
{
    /*...*/
            if (sub_eclass->ec_sortref == 0)        /* can't happen */
                elog(ERROR, "volatile EquivalenceClass has no sortref");
  

Это сообщение об ошибке отображается в двух других местах в исходном коде, но условие запуска, ec_sortref == 0 , то же самое, и во всех трех местах появляются одни и те же комментарии «не может произойти».

Таким образом, либо ваша база данных повреждена, либо вы обнаружили ошибку в PostgreSQL.