Postgresql,如何为一个触发器添加多个表

时间:2016-01-15 19:37:17

标签: postgresql function triggers

我有一个问题:如何为一个触发器添加多个表? 这是可能的,还是我应该为2个不同的表再制作2个触发器?

3 个答案:

答案 0 :(得分:4)

创建新功能

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';

答案 1 :(得分:2)

您需要为每个表定义一个触发器,因此如果您有两个表,则需要两个触发器。

但是,多个触发器可以使用相同的触发器功能。

答案 2 :(得分:0)

为所有表格迭代一个触发器 (例如外国表)

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;