↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / 锁百科 / 表级锁

表级锁 · AX

ACCESS EXCLUSIVE

访问排他锁

与全部表级锁模式冲突;也是唯一会阻塞普通 SELECT 的表级锁。

当前稳定版

冲突关系

以下只比较不同事务在同一个表上持有的锁。

与这些模式兼容 0

  • 与同一作用域的所有模式冲突。

纵轴是请求的锁,横轴是另一事务已经持有的锁;只比较同一对象。

取得此模式的命令

SQL 命令取得条件与说明
REFRESH MATERIALIZED VIEW(不含 CONCURRENTLY)作用于被刷新的物化视图,同时阻止普通读取。
DROP TABLE作用于被删除的表;依赖对象及 CASCADE 还可能取得额外锁。
DROP INDEX(不含 CONCURRENTLY)在所属表上加 ACCESS EXCLUSIVE,阻塞读写;被删除的索引也需要锁定。
TRUNCATE在被截断的各表上加锁;包含的表和依赖对象依命令选项而定。
CLUSTER重写目标表期间阻止并发读写。
VACUUM FULL重写目标表期间阻止并发读写。
VACUUM(截断表尾阶段)常规 VACUUM 尝试将末尾空页归还操作系统时,短暂尝试 ACCESS EXCLUSIVE;可用相应版本支持的截断选项避免该阶段。
REINDEX(被重建索引)此锁作用于索引本身,而非所属表;查询规划也会访问索引,所以非并发 REINDEX 仍可能阻塞查询。
LOCK TABLE … IN ACCESS EXCLUSIVE MODE显式请求此表级模式;省略 IN … MODE 时默认为 ACCESS EXCLUSIVE。
ALTER TABLE … ADD COLUMN是否需要重写取决于版本与默认表达式;避免重写并不降低这里的锁级别。
ALTER TABLE … DROP COLUMN删除列并改变表结构。
ALTER TABLE … ALTER COLUMN … SET / DROP DEFAULT修改列默认值。
ALTER TABLE … ALTER COLUMN … TYPE改变列类型;是否重写不改变这里列出的锁要求。
ALTER TABLE … ALTER COLUMN … SET STORAGE修改列存储策略。
ALTER TABLE … ALTER COLUMN … SET COMPRESSION修改列压缩方法。
ALTER TABLE … SET TABLESPACE移动表的表空间。
ALTER TABLE … SET LOGGED / UNLOGGED切换日志持久性。
ALTER TABLE … SET ACCESS METHOD修改表访问方法。
ALTER TABLE … DROP CONSTRAINT删除约束及可能依赖的索引。
ALTER TABLE … ALTER CONSTRAINT修改约束属性。
ALTER TABLE … ALTER COLUMN … SET NOT NULL设置非空约束。
ALTER TABLE … ALTER COLUMN … DROP NOT NULL移除非空约束。
ALTER TABLE … ENABLE / DISABLE RULE启停规则。
ALTER TABLE … ENABLE / DISABLE ROW LEVEL SECURITY启停行级安全策略。
ALTER TABLE … FORCE / NO FORCE ROW LEVEL SECURITY改变表所有者是否受行级安全策略约束。
ALTER TABLE … ALTER COLUMN … DROP EXPRESSION移除生成列表达式。
ALTER TABLE … ALTER COLUMN … SET EXPRESSION设置生成列表达式。
ALTER TABLE … ALTER COLUMN … SET GENERATED / RESTART / SET sequence_option修改标识列属性或其隐式序列选项;不是名为 SET SEQUENCE 的独立子命令。
ALTER TABLE … ALTER COLUMN … ADD GENERATED … AS IDENTITY为列增加标识属性。
ALTER TABLE … ALTER COLUMN … DROP IDENTITY移除标识属性。
ALTER TABLE … INHERIT / NO INHERIT(子表)此处列出被修改的子表;父表另按继承处理锁定。
ALTER TABLE … OWNER TO修改表所有者。
ALTER TABLE … REPLICA IDENTITY修改复制标识。
ALTER TABLE … RENAME重命名表、列或约束。
ALTER TABLE … ADD CONSTRAINT(CHECK / UNIQUE / PRIMARY KEY / EXCLUDE)普通添加约束;ADD FOREIGN KEY 使用较弱的 SHARE ROW EXCLUSIVE。
ALTER TABLE … ATTACH PARTITION(待挂载分区)待挂载表需 ACCESS EXCLUSIVE;合适的 CHECK 约束可以免除验证扫描,但不免除对这张表的锁。
ALTER TABLE … ATTACH PARTITION(默认分区)PostgreSQL 11 起如有默认分区,对其取得 ACCESS EXCLUSIVE;合适 CHECK 约束可免扫描,不能免除默认分区本身的锁。递归子分区另按验证需要处理。
ALTER TABLE … DETACH PARTITION(父表)未使用 CONCURRENTLY 的常规分离。
ALTER TABLE … DETACH PARTITION(被分离分区)常规分离在被分离分区上取得 ACCESS EXCLUSIVE。
ALTER TABLE … DETACH PARTITION … CONCURRENTLY(分区,完成阶段)第二阶段在被分离分区取得 ACCESS EXCLUSIVE;不允许存在默认分区时使用 CONCURRENTLY。
ALTER INDEX … SET TABLESPACE作用于被移动的索引;不要把索引上的锁当作同名表上的锁。
ALTER INDEX … SET / RESET (fillfactor = …)作用于被修改的索引本身。
ALTER INDEX … ATTACH PARTITIONPostgreSQL 11 起;修改父分区索引与被附加的子索引。

链接指向本站 PostgreSQL 18 的 SQL 命令百科。命令也可能取得其他锁,查看完整命令关联表。

其他锁模式

数据来源

当前查看 PostgreSQL 18,采样构建 REL_18_STABLE · 753057e340da。冲突关系与命令行为按该版本的文档和源码整理。命令链接进入本站 SQL 命令百科,并保留所选版本。

本站显式锁定手册 · 官方手册

查看采样源码与构建依据

资料核验日期:2026-09-26。