PostgreSQL 教程: PostgreSQL 触发器简介

九月 9, 2023

摘要:在本教程中,您将了解 PostgreSQL 触发器、为什么应该使用触发器以及何时使用它们。

什么是 PostgreSQL 触发器

PostgreSQL 触发器是每当与表关联的事件发生时自动调用的函数。与表关联的事件可以是:INSERTUPDATEDELETETRUNCATE

触发器是与表关联的特殊的用户定义函数。要创建新的触发器,首先定义一个触发器函数,然后将该触发器函数绑定到表。

触发器和用户定义函数的区别在于,触发器是在触发事件发生时自动调用的。

PostgreSQL 触发器类型

PostgreSQL 提供两种主要类型的触发器:

  • 行级触发器
  • 语句级触发器

两种类型之间的区别在于调用触发器的次数和时间。

例如,如果您发出一条修改 20 行的UPDATE语句,则行级触发器将被调用 20 次,而语句级触发器将被调用 1 次。

您可以指定触发器是在事件之前还是之后调用。如果在事件之前调用触发器,它可以跳过当前行的操作,甚至更改正在更新或插入的行。如果在事件之后调用触发器,则所有更改都可供触发器使用。

何时使用触发器

如果数据库被各种应用程序访问,并且您希望在数据库中保持跨操作能力,只要表的数据被修改,触发器就会自动运行。例如,如果您希望保留数据历史记录,而不要求应用程序具有检查每个事件(例如INSERTUDPATE)的逻辑。

此外,您还可以使用触发器来维护复杂的数据完整性规则,这些规则除了在数据库级别实施,无法在其他地方实现。例如,当向customer表中添加新行时,还必须在银行和信用表中创建其他行。

使用触发器的主要缺点是,您必须知道触发器存在,并了解其逻辑才能弄清楚数据更改时的影响。

PostgreSQL 触发器对比 SQL 标准触发器

尽管 PostgreSQL 实现了 SQL 标准,但 PostgreSQL 中的触发器有一些特定的功能:

  • PostgreSQL 可以触发TRUNCATE事件的触发器。
  • PostgreSQL 允许您在视图上定义语句级触发器。
  • PostgreSQL 要求您定义用户定义的函数作为触发器的操作,而 SQL 标准允许您使用任何 SQL 命令。

概括

  • 触发器是当表上出现INSERTUPDATEDELETETRUNCATE时自动调用的函数。

  • PostgreSQL 支持行级和语句级触发器。