Postgres:将表改为未记录

Joh*_*ell 2 postgresql postgresql-9.1

我已经看到了这个答案,如何将PostgreSQL UNLOGGED功能应用到现有表中?,这基本上表明将表转换为未记录的方法是运行:

CREATE UNLOGGED TABLE your_table_unlogged AS SELECT * FROM your_table;
Run Code Online (Sandbox Code Playgroud)

这仍然是这种情况,因为虽然这是一个明显的工作解决方案,但对于大型表,可能会有时间和磁盘空间因素发挥作用.并且,如果是的话,有人可以简要解释一下Postgres的体系结构意味着你需要重写整个表以使其无法登录吗?

Cra*_*ger 6

更新:在PostgreSQL 9.5+中有ALTER TABLE ... SET LOGGED... SET UNLOGGED

转换UNLOGGEDLOGGED要求将整个表的数据写入xlogs,如果wal_level是> minimal所以复制品获得副本.所以它不是免费的,但它仍然值得创建一个未记录的表,填充它然后设置它记录如果你有一堆清理和删除和合并工作在初始加载后在表上做.


是的,9.4中的情况仍然如此.

从记录转换到UNLOGGED理论上并不是很难AFAIK,但是没有人完成这项工作.主要的是必须重新检查引用它的所有约束和类型等,以确保没有从另一个记录表引用到该表.大多数注意力都集中在另一个案例上,因此如果这个功能对您很重要,请考虑为其开发提供资金或自己参与开发.

UNLOGGED对于不参与流复制或使用的节点,可以转换为已记录archive_command.这并不简单,因为需要处理表的数据没有被发送但突然改变它的事实 - 复制协议需要进一步增强以允许在继续之前对表进行基本复制.