题: 我已经在Oracle数据库中创建了触发器。但是我’是PostgreSQL的新功能。您能解释一下如何在Postgres中使用适当的示例创建触发器吗?es?
回答: 当表中发生事件(插入,删除或更新)时,可以使用触发器来执行功能。让我们通过示例回顾如何创建触发器。
1. PostgreSQL创建演示表
创建emp_table和backup_tbl,如下所示。
CREATE TABLE emp_table ( empid int, empname name, salary int ); CREATE TABLE backup_tbl ( empid int, empname name, salary int, operation varchar(25) );
有关一些postgreSQL命令,请参阅我们前面的内容。 15个高级postgreSQL命令 文章。
2. PostgreSQL创建语言
创建触发所需的语言plpgsql。
CREATE LANGUAGE plpgsql;
3.创建PostgreSQL触发函数
该函数将在插入,删除或更新操作之前被调用。它执行以下操作:
- 在删除操作之前,它将旧数据插入backup_tbl。
- 在更新操作之前,它将旧数据插入backup_tbl。
- 在插入操作之前,它将新数据插入backup_tbl。
CREATE FUNCTION ins_function() RETURNS trigger AS ' BEGIN IF tg_op = ''DELETE'' THEN INSERT INTO backup_tbl(empid, empname, salary, operation) VALUES (old.empid, old.empname, old.salary, tg_op); RETURN old; END IF; IF tg_op = ''INSERT'' THEN INSERT INTO backup_tbl(empid, empname, salary, operation) VALUES (new.empid, new.empname, new.salary, tg_op); RETURN new; END IF; IF tg_op = ''UPDATE'' THEN INSERT INTO backup_tbl(empid, empname, salary, operation) VALUES (old.empid, old.empname, old.salary, tg_op); RETURN new; END IF; END ' LANGUAGE plpgsql;
4.创建PostgreSQL触发器
使用下面的create trigger sql命令,创建一个将调用该函数的触发器‘ins_function’插入,删除或更新操作之后。
在插入,删除或更新之后创建触发器audit_ins 在每个行的emp_table上 执行程序ins_function();
确保使用以下方法备份postgreSQL数据库 pg_dump和psql 命令。
5.测试PostgreSQL触发器
尝试将示例数据插入到空容器中,这将根据触发逻辑将数据自动插入到backup_table中。
# INSERT INTO emp_table (empid, empname, salary) values (101, 'sathiya', '3000'); INSERT 0 1 # SELECT * from backup_tbl ; empid | empname | salary | operation -------+---------+--------+----------- 101 | 萨提亚 | 3000 | INSERT (1 row)
尝试更新为emptable的数据,这将根据触发逻辑将旧数据自动插入backup_tbl。
# UPDATE emp_table SET salary = '2500' where empid = '101'; UPDATE 1 # SELECT * from backup_tbl ; empid | empname | salary | operation -------+---------+--------+----------- 101 | 萨提亚 | 3000 | INSERT 101 | 萨提亚 | 3000 | UPDATE (2 rows)
尝试删除可清空的数据,这将根据触发逻辑将旧数据自动插入到backup_tbl中。
# DELETE FROM emp_table WHERE empid = '101'; DELETE 1 # SELECT * from backup_tbl ; empid | empname | salary | operation -------+---------+--------+----------- 101 | 萨提亚 | 3000 | INSERT 101 | 萨提亚 | 3000 | UPDATE 101 | 萨提亚 | 2500 | DELETE
如果您喜欢这篇文章,您可能还会喜欢..
![]() |
![]() |
![]() |
![]() |
好刷新!!!