↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

Wiki / 锁

FOR NO KEY UPDATE

Behaves similarly to FOR UPDATE, except that the lock acquired is weaker: this lock will not block SELECT FOR KEY SHARE commands that attempt to acquire a lock on the same rows. This lock mode is also acquired by any UPDATE that does not acquire a FOR UPDATE lock.

当前阅读 PG 18·选择有来源记录的版本

此版本暂无所选语言的定义,以下显示原始英文内容。

兼容性

比较不同事务持有同一对象的锁 行锁.

查看完整兼容性矩阵

取得此锁模式的命令

SQL 命令对象、阶段与条件
SELECT FOR NO KEY UPDATELock selected rows, with ROW SHARE on the target table. NOWAIT and SKIP LOCKED affect waiting, not mode compatibility. 来源
UPDATE (non-key update)UPDATE uses this mode when it does not require FOR UPDATE. Key columns are columns of a unique index usable by a foreign key; partial and expression indexes do not qualify. 来源
MERGE … WHEN MATCHED THEN UPDATE (non-key)The UPDATE branch actually runs and does not need FOR UPDATE. Other MERGE actions can require different row locks. 来源
INSERT … ON CONFLICT DO UPDATE (non-key)Lock the existing conflicting row for UPDATE, even when the DO UPDATE WHERE condition excludes the update. Key-column changes determine the mode. 来源

其他锁模式

conflicts
for-share, for-no-key-update, for-update

版本定义 PG 18

Behaves similarly to FOR UPDATE, except that the lock acquired is weaker: this lock will not block SELECT FOR KEY SHARE commands that attempt to acquire a lock on the same rows. This lock mode is also acquired by any UPDATE that does not acquire a FOR UPDATE lock.

比较版本

完整来源事实

commands

map[label:SELECT FOR NO KEY UPDATE note:Lock selected rows, with ROW SHARE on the target table. NOWAIT and SKIP LOCKED affect waiting, not mode compatibility. slug:select source:map[kind:documentation path:doc/src/sgml/mvcc.sgml revision:753057e340da8f22e57c9a409ea7a235fd6a46bd sha256:4b7bf77ee0af4b86052330ff2421d567df3604b75fe7d4f522bec84fdea87340 url:https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/mvcc.sgml] source_url:https://www.postgresql.org/docs/18/explicit-locking.html variant:dc13a30028da], map[label:UPDATE (non-key update) note:UPDATE uses this mode when it does not require FOR UPDATE. Key columns are columns of a unique index usable by a foreign key; partial and expression indexes do not qualify. slug:update source:map[kind:documentation path:doc/src/sgml/mvcc.sgml revision:753057e340da8f22e57c9a409ea7a235fd6a46bd sha256:4b7bf77ee0af4b86052330ff2421d567df3604b75fe7d4f522bec84fdea87340 url:https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/mvcc.sgml] source_url:https://www.postgresql.org/docs/18/explicit-locking.html variant:ff82a8ae4e60], map[label:MERGE … WHEN MATCHED THEN UPDATE (non-key) note:The UPDATE branch actually runs and does not need FOR UPDATE. Other MERGE actions can require different row locks. slug:merge source:map[kind:documentation path:doc/src/sgml/mvcc.sgml revision:753057e340da8f22e57c9a409ea7a235fd6a46bd sha256:4b7bf77ee0af4b86052330ff2421d567df3604b75fe7d4f522bec84fdea87340 url:https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/mvcc.sgml] source_url:https://www.postgresql.org/docs/18/explicit-locking.html variant:85e4fea63221], map[label:INSERT … ON CONFLICT DO UPDATE (non-key) note:Lock the existing conflicting row for UPDATE, even when the DO UPDATE WHERE condition excludes the update. Key-column changes determine the mode. slug:insert source:map[kind:command-documentation path:doc/src/sgml/ref/insert.sgml revision:753057e340da8f22e57c9a409ea7a235fd6a46bd sha256:f93403779fb1d980cd5995a1e2741bbdae8404584407610f9aba33ec4724a39f url:https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/ref/insert.sgml] source_url:https://www.postgresql.org/docs/18/sql-insert.html variant:22d6f52ccf90]

provenance

{"doc_slug":"18","fetched_at":"2026-09-27T09:39:42+00:00","label":"18","major":"18","official_url":"https://www.postgresql.org/docs/18/explicit-locking.html","ref":"REL_18_STABLE","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sources":[{"kind":"command-documentation","path":"doc/src/sgml/ref/alter_index.sgml","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"746cd43287186dfbfa6acf77fd5c6713e66919653fb00af5476a0baa65988e7a","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/ref/alter_index.sgml"},{"kind":"command-documentation","path":"doc/src/sgml/ref/alter_table.sgml","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"10436673fa2f093bdf51986a06d22dd748a9bb003bcd5517db2a65fba569a3c9","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/ref/alter_table.sgml"},{"kind":"command-documentation","path":"doc/src/sgml/ref/comment.sgml","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"d0048329d237192696d7ccb9471aba4137d943556fdb770e2ffb3cf6c511c18f","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/ref/comment.sgml"},{"kind":"source","path":"src/backend/commands/copy.c","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"f50ecc1531109fc172d841d461e209cef611f3d017ef4184034c39e128deabbe","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/commands/copy.c"},{"kind":"command-documentation","path":"doc/src/sgml/ref/create_index.sgml","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"3698f11c6f447d127e4624a1a845dee4d5146b8337ddc6d895a7962e676717f8","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/ref/create_index.sgml"},{"kind":"source","path":"src/backend/access/heap/heapam.c","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"bca2ca0746a1862016bdb416b8482441a7b16360f71afe5e4abf6dbae0fa0c72","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/access/heap/heapam.c"},{"kind":"source","path":"src/backend/catalog/index.c","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"98a4156a5c21ae856a3b583b633cdeb578a5b69910386c9f166d69fcb04ba2d0","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/catalog/index.c"},{"kind":"command-documentation","path":"doc/src/sgml/ref/insert.sgml","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"f93403779fb1d980cd5995a1e2741bbdae8404584407610f9aba33ec4724a39f","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/ref/insert.sgml"},{"kind":"source","path":"src/backend/storage/lmgr/lock.c","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"e7f43560bf6a8417ff46991238084b6edeb44a995b87670ed1f7fa6f1515276b","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/storage/lmgr/lock.c"},{"kind":"documentation","path":"doc/src/sgml/mvcc.sgml","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"4b7bf77ee0af4b86052330ff2421d567df3604b75fe7d4f522bec84fdea87340","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/mvcc.sgml"},{"kind":"command-documentation","path":"doc/src/sgml/ref/reindex.sgml","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"5e889d6e1d9b09d5f9cd3f7086ca13f540da0fe8262cdd8a9037ce9aa6f1dfdf","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/ref/reindex.sgml"},{"kind":"source","path":"src/backend/utils/adt/ri_triggers.c","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"a3fed49fbda88fe0fe5bcf35eb019fced28596ae4046233f2acb2eb9f90ab1da","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/utils/adt/ri_triggers.c"},{"kind":"source","path":"src/backend/commands/tablecmds.c","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"df8817816f893e73d5648fea169e222ba33320e5b24bf755b424b29098f4e7da","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/commands/tablecmds.c"},{"kind":"command-documentation","path":"doc/src/sgml/ref/vacuum.sgml","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"80ca5592cda7b74938385f84f09faac33574374c1a05d605a2d55982e4cf1bbf","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/doc/src/sgml/ref/vacuum.sgml"},{"kind":"source","path":"src/backend/access/heap/vacuumlazy.c","revision":"753057e340da8f22e57c9a409ea7a235fd6a46bd","sha256":"90932e3b1a7b57dda8f740807def59aedb57fbd0e2173e3af3309f145192c7c2","url":"https://raw.githubusercontent.com/postgres/postgres/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/access/heap/vacuumlazy.c"}],"status":"stable"}

summary

Behaves similarly to FOR UPDATE, except that the lock acquired is weaker: this lock will not block SELECT FOR KEY SHARE commands that attempt to acquire a lock on the same rows. This lock mode is also acquired by any UPDATE that does not acquire a FOR UPDATE lock.

来源引用

完整定义与证据 JSON

定义来源

center · PostgreSQL 18 · 10:f4e8f137bfb08a664c8288824c1e36b5143ac875;11:170e416034ec0231d9e9238f2577eeb76ca8d181;12:3f302f0ed06f69c5ebd33d4df95895323a3cbef6;13:05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2;14:fba35c7c28a567839faba867db0808564c0a66db;15:0351991b8e7c7b64382e2f30ce581a8f276590a6;16:dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa;17:163288afd32a448244c8df75b3c33181aadd7f20;18:753057e340da8f22e57c9a409ea7a235fd6a46bd;19:b73d13c32c834a2c8e1c60cb92f79530376cedf1;20:2c10c2ce4d7bcd57543a49ab402af02a39724e0a

正文语言: en · 10:f4e8f137bfb08a664c8288824c1e36b5143ac875;11:170e416034ec0231d9e9238f2577eeb76ca8d181;12:3f302f0ed06f69c5ebd33d4df95895323a3cbef6;13:05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2;14:fba35c7c28a567839faba867db0808564c0a66db;15:0351991b8e7c7b64382e2f30ce581a8f276590a6;16:dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa;17:163288afd32a448244c8df75b3c33181aadd7f20;18:753057e340da8f22e57c9a409ea7a235fd6a46bd;19:b73d13c32c834a2c8e1c60cb92f79530376cedf1;20:2c10c2ce4d7bcd57543a49ab402af02a39724e0a