CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
PostgreSQL DBA 入门/课时/PL/pgSQL 与触发器
RawBlame
课时目录12 节

PostgreSQL DBA 入门

  1. 01DBA 职责与 PG 架构
  2. 02安装与部署
  3. 03安全与权限
  4. 04SQL 与事务
  5. 05对象模型与类型
  6. 06索引与执行计划
  7. 07性能与监控
  8. 08备份与恢复
  9. 09复制与高可用
  10. 10PL/pgSQL 与触发器
  11. 11自动化运维
  12. 12综合练习

PL/pgSQL 与触发器

存储过程、Trigger、窗口函数。

30 分钟

PL/pgSQL 与数据库内逻辑

PL/pgSQL 是 PG 默认过程语言,用于函数、触发器与批处理。DBA 需评估:哪些逻辑放库内、哪些留在 Spring 服务层。与 /roadmaps/postgresql-dba 存储过程节点对齐。

学习目标

  • 编写简单函数与 RETURNS TABLE
  • 理解触发器在审计、约束上的用途
  • 掌握 DBA 视角的「库内逻辑」边界

核心概念

函数示例

CREATE OR REPLACE FUNCTION app.track_lesson_count(p_slug text)
RETURNS integer
LANGUAGE plpgsql STABLE
AS $$
DECLARE
  cnt integer;
BEGIN
  SELECT count(*) INTO cnt
  FROM app.cf_lesson l
  JOIN app.cf_track t ON t.id = l.track_id
  WHERE t.slug = p_slug;
  RETURN cnt;
END;
$$;

SELECT app.track_lesson_count('postgresql-dba-essentials');

STABLE 表示同一事务内结果一致,利于优化器内联。

触发器(审计 updated_at)

CREATE OR REPLACE FUNCTION app.set_updated_at()
RETURNS trigger LANGUAGE plpgsql AS $$
BEGIN
  NEW.updated_at := now();
  RETURN NEW;
END;
$$;

CREATE TRIGGER trg_cf_track_updated
  BEFORE UPDATE ON app.cf_track
  FOR EACH ROW EXECUTE FUNCTION app.set_updated_at();

PG 15+ 用 EXECUTE FUNCTION;旧版为 EXECUTE PROCEDURE。

DBA 边界建议

适合库内适合应用层
约束、审计字段复杂业务规则
统计快照、批清理外部 API 调用
迁移一次性脚本领域模型与事务编排

过多 PL 逻辑增加 版本管理与测试 成本;与 Spring @Transactional 重复时优先应用层。

与 MySQL/Spring Boot 对照

项PostgreSQLMySQL 8
过程语言PL/pgSQL(内置)SQL + stored procedure
触发器行/语句级,功能全行级为主
调用方SELECT func()CALL proc()
Spring少用 @Select 调函数同,Flyway 部署 SQL

本站 MyBatis-Flex 以 SQL/Mapper 为主;PG 函数可用于 报表 SQL 简化,非核心业务路径。

练习

  • 实现 并对不存在 slug 返回 0
track_lesson_count
  • 为练习表加 updated_at 触发器并验证 UPDATE
  • 写 3 条原则:何种逻辑不应放进 PL/pgSQL
  • 小结

    PL/pgSQL 适合审计与数据就近计算;复杂业务仍归 Spring。 下一课运维监控与告警。

    加载本节练习…
    ← 上一课复制与高可用下一课 →自动化运维