CREATE OR REPLACE FUNCTION updated_timestamp_func()
RETURNS TRIGGER
LANGUAGE plpgsql AS
'
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
';
然后为每个包含列updated_at的表创建触发器
DO $$
DECLARE
t text;
BEGIN
FOR t IN
SELECT table_name FROM information_schema.columns WHERE column_name = 'updated_at'
LOOP
EXECUTE format('CREATE TRIGGER trigger_update_timestamp
BEFORE UPDATE ON %I
FOR EACH ROW EXECUTE PROCEDURE updated_timestamp_func()', t,t);
END loop;
END;
$$ language 'plpgsql';
DO
$$
DECLARE
r RECORD;
BEGIN
FOR r IN SELECT *
FROM information_schema.tables
where table_type = 'FOREIGN TABLE'
and table_schema = 'public'
and table_name <> 'django_migrations'
LOOP
RAISE NOTICE 'CREATE TRIGGER FOR: %', r.table_name::text;
EXECUTE 'CREATE TRIGGER trg_insert_ids
BEFORE INSERT
on ' || r.table_name || ' FOR EACH ROW
EXECUTE PROCEDURE insert_ids();';
END LOOP;
END;
$$ LANGUAGE plpgsql;
4条答案
按热度按时间sbdsn5lh1#
创建新函数
然后为每个包含列updated_at的表创建触发器
5lhxktic2#
为所有表迭代一个触发器
(For外部表示例)
pbwdgjma3#
您需要为每个表定义一个触发器,因此如果您有两个表,则需要两个触发器。
但是,多个触发器可以使用相同的触发器功能。
q7solyqu4#
这个答案可能有点晚,但我有另一种方法来使用多个表只有一个触发器。
我有多个生产表,每个生产表都有一个插入触发器,它调用我的data_production_add()。
在这个函数中,我使用TG_TABLE_NAME来知道哪个表正在调用触发器,下面是一个例子:
通过这样做,我可以插入一个“production_stats”与常见的信息,如id_device或id_user,但不同的值的prot_cmd_var
希望这能帮助到一些人