PostgreSQL数据库中的锁有自旋锁、轻量锁和常规锁。自旋锁和轻量锁属于系统锁,自旋锁会一直处于忙等状态,没有等待队列;轻量锁虽然有等待队列,但是排队规则较为简单;它们都没有死锁检测机制。常规锁属于事务锁,有等待队列,需要做死锁检测。
PostgreSQL的行锁是使用常规锁和xmax相结合的方式实现的,这种方法能够降低主锁表的内存占用量,但也增加了元组头部的长度。