Создать специальную функцию триггера:
CREATE OR REPLACE FUNCTION some_function()
RETURNS trigger AS $$
BEGIN
IF some_condition THEN
RAISE EXCEPTION 'Some message for id %', NEW.id;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
Затем определить триггер для его запуска
CREATE TRIGGER some_trigger
BEFORE INSERT OR UPDATE ON some_table
FOR EACH ROW EXECUTE PROCEDURE some_function();
При возникновении исключения обновление завершится неудачей.
Выполненный SQL может быть или произвольной сложности, включая любой запрос или функцию, которая вам нравится.Он также может изменить НОВЫЕ значения с помощью SET NEW.some_column = some_value
или даже обновить другие таблицы.
Обратите внимание, что NEW.id
является только примером столбца.Используйте любой столбец, который вам нравится из строки NEW (или его нет) в сообщении.
Если проверка локализована в строке, рассмотрите возможность использования ограничения столбца, например:
CREATE TABLE my_table (
some_column int CHECK (some_column between 0 and 10),
other_column int CHECK (other_column < some_column)
)