PostgreSQL中为car表创建增删改触发同步至car2表的Trigger
在PostgreSQL中为car表创建同步触发器到car2
要实现当car表发生插入、更新或删除操作时,将对应记录同步到car2表,你需要分两步:创建触发器函数和创建触发器,具体操作如下:
1. 创建触发器函数
这个函数会根据car表的操作类型(插入/更新/删除),将对应记录插入到car2表,同时自动填充InsertionDate字段为当前时间:
CREATE OR REPLACE FUNCTION sync_car_to_car2() RETURNS TRIGGER AS $$ BEGIN -- 根据操作类型选择对应的记录 CASE TG_OP WHEN 'INSERT', 'UPDATE' THEN INSERT INTO car2 (ID, Name, Location, InsertionDate) VALUES (NEW.ID, NEW.Name, NEW.Location, CURRENT_TIMESTAMP); WHEN 'DELETE' THEN INSERT INTO car2 (ID, Name, Location, InsertionDate) VALUES (OLD.ID, OLD.Name, OLD.Location, CURRENT_TIMESTAMP); END CASE; RETURN NULL; -- 因为是AFTER触发器,返回值不影响原表操作 END; $$ LANGUAGE plpgsql;
关键说明:
TG_OP是PostgreSQL内置的触发器变量,用于判断当前触发的操作类型- 插入、更新操作使用
NEW变量获取操作后的记录;删除操作使用OLD变量获取被删除的记录 CURRENT_TIMESTAMP自动生成当前时间戳,填充到car2的InsertionDate字段
2. 创建触发器
将上面的函数绑定到car表,指定触发时机为插入、更新、删除操作完成后:
CREATE TRIGGER trigger_car_sync_to_car2 AFTER INSERT OR UPDATE OR DELETE ON car FOR EACH ROW EXECUTE FUNCTION sync_car_to_car2();
关键说明:
FOR EACH ROW表示每一条记录的操作都会触发该函数(而非针对整个SQL语句)- 触发器会在
car表的每一条记录被插入、更新或删除后,自动执行同步逻辑
额外注意事项
- 若
car2表尚未创建,可使用以下语句创建:
CREATE TABLE car2 ( ID INT, Name VARCHAR(255), Location VARCHAR(255), InsertionDate TIMESTAMP );
- 确保
car与car2的对应字段类型匹配,若有差异需调整函数中的字段赋值逻辑
内容的提问来源于stack exchange,提问作者Arie
相关产品推荐
相关产品推荐

