Postgres 15:向枚举添加值是否会获取任何类型的锁?

问题描述 投票:0回答:1

我是 Postgres 新手(由于平台限制而使用 15),并考虑将 enum 作为列类型。

将来,当我运行

ALTER TYPE name ADD VALUE ...
为枚举添加值时,它是否会获取任何类型的锁?

如果是的话,它获得什么样的锁?大概能保存多久?

postgresql
1个回答
0
投票

您将在枚举上获得

ExclusiveLock
,直到您提交正在运行
ALTER TYPE my_enum ADD VALUE
的事务:演示

create type my_enum as enum('first','second');
begin;
select relation::regclass,objid::regtype,locktype,mode from pg_locks;
关系 对象 锁型 模式
pg_locks 关系 访问共享锁
虚拟xid 排他锁
交易ID 排他锁
alter type my_enum add value 'third' after 'second';
select relation::regclass,objid::regtype,locktype,mode from pg_locks;
关系 对象 锁型 模式
pg_locks 关系 访问共享锁
虚拟xid 排他锁
我的枚举 物体 排他锁
交易ID 排他锁

它的作用是阻止任何其他事务对类型进行

alter
ing/
drop
ping,因此,如果您的计划是继续大量添加和删除值,那么它可能会成为瓶颈。否则,在
alter
期间,其他人都可以继续创建使用它的关系并进行涉及该类型的操作。

© www.soinside.com 2019 - 2024. All rights reserved.