我正在尝试在PostgreSQL 8.2中编写一个触发器函数,该函数将动态使用TG_TABLE_NAME生成和执行SQL语句。我可以找到各种后续版本的PostgreSQL示例,但由于一些要求,我卡在了8.2上。以下是当前的函数,虽然可行,但并不够灵活:
CREATE OR REPLACE FUNCTION cdc_TABLENAME_function() RETURNS trigger AS $cdc_function$
DECLARE
op cdc_operation_enum;
BEGIN
op = TG_OP;
IF (TG_WHEN = 'BEFORE') THEN
IF (TG_OP = 'UPDATE') THEN
op = 'UPDATE_BEFORE';
END IF;
INSERT INTO cdc_test VALUES (DEFAULT,DEFAULT,op,DEFAULT,DEFAULT,OLD.*);
ELSE
IF (TG_OP = 'UPDATE') THEN
op = 'UPDATE_AFTER';
END IF;
INSERT INTO cdc_test VALUES (DEFAULT,DEFAULT,op,DEFAULT,DEFAULT,NEW.*);
END IF;
IF (TG_OP = 'DELETE') THEN
RETURN OLD;
ELSE
RETURN NEW;
END IF;
END;
目前的写法需要为每个表编写单独的触发器函数。我想使用TG_TABLE_NAME动态构建我的INSERT语句,并在其前缀中加上“cdc_”,因为所有表都遵循相同的命名约定。然后,每个表的每个触发器都可以调用同一个函数。