PostgreSQL ALTER TABLE 需要 35 分钟

PostgreSQL ALTER TABLE takes 35 minutes

ALTER TABLE table1 ADD COLUMN category_id integer

我已经在服务器负载的情况下在生产环境中执行了这个查询。根据datadog用了35分钟

这个 table1 有大约 1 亿行。

35分钟正常吗?有什么办法可以在不锁定 table?

的情况下执行这种简单的迁移(添加可为空的列)

这个命令只需要一瞬间。

您必须花费 35 分钟等待 table 上的 ACCESS EXCLUSIVE 锁被授予(同时阻止任何不幸排在您后面的事务)。

您可能对长事务有疑问。通常它们应该尽可能短,否则它们会长时间持有锁,并且还会使 VACUUM 无法清理死行版本。

锁是必需的,但不应该对行为良好的数据库工作负载造成问题。