Возникла проблема построения полнотекстового индекса.
В индексированной таблице создано поле fts типа ts_vector. При вставке и обновлении триггер должен при необходимости обновить поле fts. Чтобы предотвратить обновление полнотекстового индекса при обновлении полей, не связанных с ним, было установлено следующее условие:
IF (TG_OP = 'UPDATE') AND (NEW."name" = OLD."name")
THEN RETURN NEW;
END IF;
Те.
если имя не обновилось, ничего не трогаем и просто завершаем выполнение триггера.
Но во время обновления этот триггер вылетел с ошибкой «запись «старая» еще не назначена».
Однако при такой конструкции ошибка не возникает:
IF (TG_OP = 'UPDATE') THEN
IF (NEW."name" = OLD."name") THEN
RETURN NEW;
END IF;
END IF;
Поэтому при вычислении логического выражения оценивается каждый его компонент. И даже если TG_OP != 'UPDATE' (что означает выполнение INSERT), проверяется второе условие, где OLD не определено.
Вот здесь и возникает ошибка.
Теги: #postgresql #plpgsql #postgresql
-
Почему Бизнесу Нужны Услуги Ит-Поддержки
19 Oct, 24 -
Как Найти Нишу Для Заработка В Интернете?
19 Oct, 24 -
Самые Лучшие Стратегии В Социальных Сетях
19 Oct, 24 -
Сервис Поиска Whois От Росниирос
19 Oct, 24 -
Взлом Программы Процессора С Одной Командой
19 Oct, 24