问题描述
我正在使用 debezium 和 Postgres 数据库。该数据库包含几个带有 TOAST(超大属性存储技术)列的表。要处理未更改的 Postgres TOAST 列值,一种方法是将表的 REPLICA IDENTITY
设置为 FULL
。但是,我不确定运行 ALTER TABLE mytable REPLICA IDENTITY FULL
是否会导致数据库停机,或者这将是一个安全的操作。 REPLICA IDENTITY
的当前值为 DEFAULT
。
解决方法
更改副本标识不会导致停机,但它需要对表进行短暂的 ACCESS EXCLUSIVE
锁定,如果您有长时间运行的涉及该表的事务,这可能会成为问题。
但是,我不明白这个练习的意义。这与 TOAST 无关;唯一的影响是复制的 UPDATE
和 DELETE
语句将具有 WHERE
条件中的所有列,而不仅仅是主键,这将增加 WAL 量并对性能不利。
REPLICA IDENTITY FULL
主要是无主键的表的拐杖,无论如何都要避免。