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 решилась просто. Были удалены функция и триггер и созданы заново.
Непонятны причины всего этого. Непонятно что делать дальше…