Создание или замена триггерных сообщений
Я хочу "создать или заменить" триггер для таблицы postgres. Однако не существует такого выражения sql.
Я вижу, что сначала могу выполнить "DROP TRIGGER IF EXISTS" (http://www.postgresql.org/docs/9.5/static/sql-droptrigger.html).
Мой вопрос:
- Есть ли рекомендуемый/лучший вариант, чем (триггер DROP + CREATE)
- Есть ли причина, почему нет такого "создания или замены триггера" (что может означать, что я не хочу этого делать)
Обратите внимание, что в oracle есть "Create or Replace Trigger" (https://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm). Тогда
- Является ли такая команда запланированной для Postgres вообще?
Ответы
Ответ 1
Postres имеет транзакцию DDL, поэтому BEGIN > DROP > CREATE > COMMIT is the equivalent of
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ
https://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis - это хорошая запись о том, как postgre transactional DDL сравнивается с другими системами (например, оракулом)
Текущие запланированные функции postgres относительно триггеров (https://wiki.postgresql.org/wiki/Todo#Triggers) не включают добавление синтаксиса REPLACE
Ответ 2
Невозможно создать или заменить триггер, но может сделать это.
DROP TRIGGER IF EXISTS yourtrigger_name on "yourschemaname"."yourtablename";