PostgreSQL之索引/函数/触发器

无锁加索引

sql 复制代码
CREATE INDEX CONCURRENTLY idx_xxxxx_updated_at ON xxxxx (updated_at DESC);

检验是否生效

sql 复制代码
EXPLAIN ANALYZE SELECT MAX(updated_at) FROM xxxxx;

如果你的生产环境表里已经有很多数据,且服务正在运行,直接 CREATE INDEX 可能会锁表 ,导致你的 heartbeat(心跳)更新不进去。

在 PostgreSQL 中,建议使用 CONCURRENTLY 关键字。它允许在创建索引时不阻塞表的写入

触发器更新 updated_at

sql 复制代码
- 1. 创建一个通用的更新函数(只需建一次)
CREATE OR REPLACE FUNCTION update_timestamp_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = now();
    RETURN NEW;
END;
$$ language 'plpgsql';

-- 2. 给表挂上触发器(每个表挂一次)
CREATE TRIGGER update_xxxxx_modtime
    BEFORE UPDATE ON xxxxx
    FOR EACH ROW
    EXECUTE FUNCTION update_timestamp_column();
  • 绝对一致:无论你是用 Go 代码更新、用 psql 手动改数据、还是将来加了别的运维脚本,updated_at 都会强制更新。
  • 代码清爽:你的 repo 里的 SQL 语句不需要写 updated_at = now(),SQL 会短很多。
  • 时间统一:始终以数据库服务器的时间为准,避免了多台 Go 服务节点之间因为机器时钟不同步导致的"时间倒流"问题。
相关推荐
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
geovindu3 天前
sql: Transaction & Concurrency Patterns using postgresql 18
postgresql·数据库开发·数据库架构
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安3 天前
MySQL-触发器
数据库·mysql
白远山3 天前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析
Omics Pro3 天前
斯坦福Nature+Science|广义虚拟细胞基础大模型
数据库·人工智能·算法·机器学习·自然语言处理