PostgreSQL创建触发器的实现示例

 更新时间:2025年06月16日 09:28:21   作者:熊大如如  
PostgreSQL的触发器Trigger是一类特殊的数据库对象,本文主要介绍了PostgreSQL创建触发器的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

入门

简介

PostgreSQL 的 触发器 Trigger 是一类特殊的数据库对象,在表的 INSERT、UPDATE 或 DELETE 事件发生时,自动执行预定义的函数(触发器函数)。它常用于 数据完整性约束、审计日志、自动计算、复杂的业务逻辑处理等场景

触发器的构成

一个完整的触发器由两个部分组成:

触发器函数(Trigger Function):触发器执行的具体逻辑,必须返回 TRIGGER 类型

触发器(Trigger):绑定到表的某个事件上,调用触发器函数

触发器的类型

按照触发时间分类

  • BEFORE 触发器(在事件发生前执行)
  • AFTER 触发器(在事件发生后执行)
  • INSTEAD OF 触发器(替代事件执行,仅适用于视图)

按照触发事件分类

  • INSERT 触发器(在插入新数据时触发)
  • UPDATE 触发器(在数据更新时触发)
  • DELETE 触发器(在数据删除时触发)
  • TRUNCATE 触发器(在 TRUNCATE 操作时触发)

按照触发级别分类

  • 行级触发器(FOR EACH ROW):对受影响的每一行数据触发一次
  • 语句级触发器(FOR EACH STATEMENT):对整个 SQL 语句仅触发一次

创建触发器

简介

PostgreSQL 触发器的创建需要两步:

  • 编写触发器函数(必须返回 TRIGGER 类型)
  • 创建触发器 并绑定到表

假设我们有一个 users 表,我们希望在有新用户插入时,自动记录日志到 user_logs 表中

示例 1:审计日志

Step 1: 创建审计日志表

CREATE TABLE user_logs (
    log_id SERIAL PRIMARY KEY,
    user_id UUID,
    action TEXT,
    log_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Step 2: 编写触发器函数

CREATE OR REPLACE FUNCTION log_user_insert() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO user_logs (user_id, action)
    VALUES (NEW.id, 'User created');
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Step 3: 创建触发器

CREATE TRIGGER user_insert_trigger
AFTER INSERT ON users
FOR EACH ROW
EXECUTE FUNCTION log_user_insert();

示例 2:自动更新修改时间

假设 users 表中有一个 updated_at 字段,我们希望在用户数据更新时,自动更新 updated_at 时间戳。

Step 1: 在 users 表添加 updated_at 字段

ALTER TABLE users ADD COLUMN updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;

Step 2: 创建触发器函数

CREATE OR REPLACE FUNCTION update_timestamp() RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = CURRENT_TIMESTAMP;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Step 3: 创建触发器

CREATE TRIGGER update_users_timestamp
BEFORE UPDATE ON users
FOR EACH ROW
EXECUTE FUNCTION update_timestamp();

示例 3:防止 DELETE

有时我们不希望某些重要数据被删除,可以通过 BEFORE DELETE** 触发器阻止删除**。

Step 1: 创建触发器函数

CREATE OR REPLACE FUNCTION prevent_delete() RETURNS TRIGGER AS $$
BEGIN
    RAISE EXCEPTION '不允许删除数据!';
END;
$$ LANGUAGE plpgsql;

Step 2: 绑定到 users 表

CREATE TRIGGER prevent_users_deletion
BEFORE DELETE ON users
FOR EACH ROW
EXECUTE FUNCTION prevent_delete();

触发器的管理

查看已有触发器

SELECT tgname, relname, tgtype, proname 
FROM pg_trigger 
JOIN pg_class ON pg_trigger.tgrelid = pg_class.oid
JOIN pg_proc ON pg_trigger.tgfoid = pg_proc.oid
WHERE NOT tgisinternal;

删除触发器

DROP TRIGGER IF EXISTS user_insert_trigger ON users;

删除触发器函数

DROP FUNCTION IF EXISTS log_user_insert();

到此这篇关于PostgreSQL创建触发器的实现示例的文章就介绍到这了,更多相关PostgreSQL创建触发器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • PostgreSQL存储过程循环调用方式

    PostgreSQL存储过程循环调用方式

    这篇文章主要介绍了PostgreSQL存储过程循环调用方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL行转列的多种方法

    PostgreSQL行转列的多种方法

    这篇文章主要介绍了PostgreSQL行转列的多种方法,本文给大家分享三种方法,每种方法结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • PostgreSQL数据库管理系统快速入门

    PostgreSQL数据库管理系统快速入门

    这篇文章主要介绍了PostgreSQL数据库快速入门,PostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能,需要的朋友可以参考下
    2023-07-07
  • pgsql锁表后kill进程的操作

    pgsql锁表后kill进程的操作

    这篇文章主要介绍了pgsql锁表后kill进程的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSQL中行锁的使用

    PostgreSQL中行锁的使用

    PostgreSQL行锁分为共享锁和排他锁,用于控制并发事务对行数据的访问,共享锁允许多事务读取,排他锁独占访问,本文就来具体介绍一下行锁,感兴趣的可以了解一下
    2025-06-06
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • PostgreSQL数据库备份的几种实现方法

    PostgreSQL数据库备份的几种实现方法

    本文主要介绍了PostgreSQL数据库备份的几种实现方法,包括pg_dump和pg_dumpall是PostgreSQL备份工具,前者备份单数据库,后者备份整个集群,感兴趣的可以了解一下
    2025-06-06
  • 浅谈postgresql数据库varchar、char、text的比较

    浅谈postgresql数据库varchar、char、text的比较

    这篇文章主要介绍了浅谈postgresql数据库varchar、char、text的比较,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • postgresql 利用fdw来实现不同数据库之间数据互通(推荐)

    postgresql 利用fdw来实现不同数据库之间数据互通(推荐)

    这篇文章主要介绍了postgresql 利用fdw来实现不同数据库之间数据互通,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • PostgreSQL中的collations用法详解

    PostgreSQL中的collations用法详解

    这篇文章主要介绍了PostgreSQL中的collations用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01

最新评论