ERROR: could not open relation with OID

Любопытную ошибку начал выдавать PostgreSQL: ERROR: could not open relation with OID 200422973 CONTEXT: PL/pgSQL function "function_iup" line 11 at select into variables. function_iup – триггерная функция. Вызов ее происходит при добавлении и изменении данных в таблице table1. Функция анализирует содержимое таблицы table2 и в ней же делает добавление или модификацию данных.

Выяснить что же стоит за этим OID’ом не удалось, так как поиск в таблицах pg_class, pg_index, pg_depend по oid’у результата не дал.

Поскольку буквально днем ранее имела место другая странная проблема (ПРОБЛЕМА2) для решения которой пересоздавался индекс на таблице table2, то предположительно старому индексу и соответствовал этот неизвестный OID.

ПРОБЛЕМА2 была в том что из таблицы table2 не выбирались все записи. Причем только, если подключаться к БД при помощи command-line tool, и только от обычного пользователя. При запуске от root’а все было нормально.
Команда:

psql –U user database

Запрос:

SELECT *
 FROM table2
 WHERE id = 80644;

Запущена от root’а – возвращает одну запись, запущена от пользователя – ноль.

Опытным путем был найден работающий запрос:

SELECT *
 FROM table2
 WHERE id >= 80644
 ORDER BY id
 LIMIT 1;

Похоже было что проблема с индексом. Однако пересоздание индекса проблему не решило. Хотя несколько позже проблему все же решил коллега, снова пересоздав индекс и, наверное, создав ПРОБЛЕМУ1.

А ПРОБЛЕМА1 решилась просто. Были удалены функция и триггер и созданы заново.

Непонятны причины всего этого. Непонятно что делать дальше…


Комментарии

Оставить комментарий

Ответ на ERROR: could not open relation with OID