Postgres 15:执行ALTER TYPE添加枚举值是否会获取锁?
PostgreSQL 15中ALTER TYPE ADD VALUE的锁机制说明
- 执行
ALTER TYPE name ADD VALUE ...时会获取锁。 - 具体锁类型:会持有ACCESS EXCLUSIVE锁,这是PostgreSQL中权限最高的锁级别,持有期间会阻塞所有针对该枚举类型的读写操作,包括查询使用该类型的表、对该类型的其他修改操作等。
- 锁的持有时长:锁只会在语句执行的极短时间内持有。添加枚举值本质是修改系统目录(如
pg_enum表),这个操作是原子性的,完成后会立即释放锁,不会长时间占用。但要注意,如果此时有其他会话在运行使用该枚举类型的长事务(比如未提交的修改、长时间查询),ALTER语句会等待这些事务结束才能获取锁,等待期间会处于排队状态,一旦拿到锁就会快速完成操作并释放。
另外建议:即便锁持有时间短,也尽量在业务低峰期执行该操作,避免短暂阻塞影响正常业务。
内容的提问来源于stack exchange,提问作者Windymelt
相关产品推荐
相关产品推荐

