在 PostgreSQL 中,咨询锁(Advisory Locks) 是一种非常强大且独特的功能。它是一种由应用程序控制其含义的锁,数据库本身并不关心你用这个锁来保护什么数据或逻辑。 简而言之:普通的行锁/表锁是为了保护数据库内部数据的完整性;而咨询锁是为了帮助应用程序做并发控制(例如实现分布式锁)。 --- 1. 咨询锁的核心特点 应用层定义含义:数据库只提供“锁”的机制(获取、阻塞、释放),至于这个锁代表“不能同时发送邮件”还是“不能同时处理同一个订单”,完全由你的代码决定。 基于数字 ID:咨询锁的标识符不是表名或行 ID,而是一个 64 位的整数,或者一对 32 位的整数。 不影响 MVCC 和表锁:咨询锁不会阻塞普通的 、、,也不会导致表膨胀。它们存在于共享内存中,速度非常快。 无死锁检测限制:虽然咨询锁也会参与 PostgreSQL 的死锁检测,但它们不会与普通的数据库对象锁产生交叉干扰。 --- 2. 咨询锁的分类 咨询锁按照生命周期和获取方式分为多个维度: A. 按生命周期分类 1. 会话级(Session-level): 锁属于当前数据库连接(Session)。...