PostgreSQL实现DML触发器条件谓词代码? 
时间: 2023-03-10 22:08:54 浏览: 45
PostgreSQL可以使用触发器来定义操作,这些操作可以在特定的数据变更发生后自动执行。触发器可以使用条件谓词来确定何时执行触发器代码,可以使用下列语句来实现:CREATE TRIGGER trigger_name BEFORE/AFTER INSERT/UPDATE/DELETE ON table_name FOR EACH ROW WHEN (condition) EXECUTE PROCEDURE function_name();
相关问题
postgresql 实现触发器语法
PostgreSQL实现触发器的语法如下:
```
CREATE [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] }
ON table
[ FROM referenced_table_name ]
[ NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } ]
[ REFERENCING { { OLD | NEW } TABLE [ AS ] transition_relation_name } [ ... ] ]
[ FOR [ EACH ] { ROW | STATEMENT } ]
[ WHEN ( condition ) ]
EXECUTE FUNCTION function_name ( arguments )
```
其中,关键字解释如下:
- `CREATE TRIGGER`:创建触发器。
- `BEFORE/AFTER/INSTEAD OF`:触发器执行的时机,分别为在操作前、操作后、代替操作。
- `event`:触发器的事件,可以是INSERT、UPDATE或DELETE。
- `table`:触发器所属的表。
- `FROM referenced_table_name`:当触发器在另一个表上定义时,该选项指定被引用的表名。
- `NOT DEFERRABLE/DEFERRABLE INITIALLY IMMEDIATE/INITIALLY DEFERRED`:设置触发器是否可以延迟执行。
- `REFERENCING`:指定OLD和NEW表的别名。
- `FOR EACH ROW/FOR EACH STATEMENT`:指定触发器是基于每个行还是每个语句执行。
- `WHEN`:指定触发器执行的条件。
- `EXECUTE FUNCTION`:指定触发器执行的函数名称和参数。
postgresql TRUNCATE TABLE 为何id没有重置?
PostgreSQL 的 TRUNCATE TABLE 命令是一种快速清空表的方式,它会立即删除表中的所有行,但不会像 DELETE FROM 命令一样,逐一地删除每一行记录。因此,使用 TRUNCATE TABLE 命令后,表的计数器也不会被重置。
如果需要重置计数器,可以使用 ALTER SEQUENCE 命令来手动重置序列的当前值。例如,假设表的主键列名为 id,序列的名称为 table_name_id_seq,可以使用以下命令来重置序列:
```
SELECT setval('table_name_id_seq', 1, false);
```
这将把序列的当前值设置为 1,以便在将来插入新行时,自动为新行分配一个新的 id 值。
相关推荐















