`ALTER TABLE mytable REPLICA IDENTITY FULL;` 是大容量 postgres 数据库的安全操作吗?

问题描述

我正在使用 debezium 和 Postgres 数据库。该数据库包含几个带有 TOAST(超大属性存储技术)列的表。要处理未更改的 Postgres TOAST 列值,一种方法是将表的 REPLICA IDENTITY 设置为 FULL。但是,我不确定运行 ALTER TABLE mytable REPLICA IDENTITY FULL 是否会导致数据库停机,或者这将是一个安全的操作。 REPLICA IDENTITY 的当前值为 DEFAULT

解决方法

更改副本标识不会导致停机,但它需要对表进行短暂的 ACCESS EXCLUSIVE 锁定,如果您有长时间运行的涉及该表的事务,这可能会成为问题。

但是,我不明白这个练习的意义。这与 TOAST 无关;唯一的影响是复制的 UPDATEDELETE 语句将具有 WHERE 条件中的所有列,而不仅仅是主键,这将增加 WAL 量并对性能不利。

REPLICA IDENTITY FULL 主要是无主键的表的拐杖,无论如何都要避免。