Там какой-либо путь состоит в том, чтобы отбросить ВСЕ триггеры от ВСЕХ таблиц в Пост-ГРЭС? Я знаю, что существует pg_trigger таблица, на которую я мог посмотреть, но не похоже, что это содержит достаточно информации для меня для дешифровки, какие триггеры я добавил к своим таблицам.
Также похоже, что ограничения Внешнего ключа обнаруживаются в pg_trigger таблице, которую я НЕ хочу отбрасывать. Я просто хочу отбросить созданный триггер пользователя от своих таблиц и сохранить FKs.
Какие-либо предложения?
Взгляните на information_schema:
SELECT * FROM information_schema.triggers;
Проще всего будет pg_dump -s
определения объектов и отфильтровать его для строк, начинающихся с CREATE TRIGGER
.
Что-то вроде
./pg_dump -s db_name | grep '^CREATE TRIGGER' | \
while read _ _ triggername _; do \
echo drop trigger "$triggername;"; \
done
(в bash) должно сработать (просмотрите его и затем запустите в базе данных).
Но, возможно, вам стоит рассмотреть alter table table_name disable trigger trigger trigger_name
вместо этого.
Вы можете начать с этого запроса, чтобы узнать имена триггеров outr:
select * from pg_trigger t,pg_proc where
pg_proc.oid=t.tgfoid
ОБНОВЛЕНИЕ: См. Реальное решение для полной функции, которую вы хотите.
Хорошо, я придумал функцию, которая делает это за меня:
CREATE OR REPLACE FUNCTION strip_all_triggers() RETURNS text AS $$ DECLARE triggNameRecord RECORD; triggTableRecord RECORD; BEGIN FOR triggNameRecord IN select distinct(trigger_name) from information_schema.triggers where trigger_schema = 'public' LOOP SELECT distinct(event_object_table) INTO triggTableRecord from information_schema.triggers where trigger_name = triggNameRecord.trigger_name; RAISE NOTICE 'Dropping trigger: % on table: %', triggNameRecord.trigger_name, triggTableRecord.event_object_table; EXECUTE 'DROP TRIGGER ' || triggNameRecord.trigger_name || ' ON ' || triggTableRecord.event_object_table || ';'; END LOOP; RETURN 'done'; END; $$ LANGUAGE plpgsql SECURITY DEFINER; select strip_all_triggers();
Она отбрасывает любой триггер в вашей общедоступной схеме.