Создание или замена триггерных сообщений

Я хочу "создать или заменить" триггер для таблицы 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). Тогда

  1. Является ли такая команда запланированной для 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";