对于大容量 postgres 数据库,“ALTER TABLE mytable REPLICA IDENTITY FULL;”操作是否安全?

Iva*_*ino 6 postgresql alter-table postgresql-9.6 debezium

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

Lau*_*lbe 6

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

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

REPLICA IDENTITY FULL对于没有主键的表来说主要是一个拐杖,无论如何都要避免。