【发布时间】:2018-10-25 06:39:31
【问题描述】:
这是postgres最新的release-version代码(链接是here):
switch (cmd->subtype)
{
/*
* These subcommands rewrite the heap, so require full locks.
*/
case AT_AddColumn: /* may rewrite heap, in some cases and visible
* to SELECT */
case AT_SetTableSpace: /* must rewrite heap */
case AT_AlterColumnType: /* must rewrite heap */
case AT_AddOids: /* must rewrite heap */
cmd_lockmode = AccessExclusiveLock;
break;
从 PostgreSQL 9.4 开始,我们有了目录 MVCC。我的问题是:为什么在执行更改表命令时必须采用最高锁定级别?代码中的 cmets 说“这些子命令重写了堆,因此需要全锁”。没看懂。
【问题讨论】: