Postgres:将表改为未记录

时间:2014-05-12 10:52:35

标签: postgresql postgresql-9.1

我已经看到了这个答案,How to apply PostgreSQL UNLOGGED feature to an existing table?,它基本上表明将表转换为未记录的方法是运行:

CREATE UNLOGGED TABLE your_table_unlogged AS SELECT * FROM your_table;

这是否仍然如此,因为虽然这是一个明显有效的解决方案,但对于大型表,可能会有时间和磁盘空间因素发挥作用。并且,如果是的话,有人可以简要解释一下Postgres的架构如何意味着你需要重写整个表以使其不被记录吗?

2 个答案:

答案 0 :(得分:6)

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

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


是的,在9.4中仍然如此。

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

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

答案 1 :(得分:4)

显然这个(alter table ... set logged | unlogged)已在(即将发布的)postgresql 9.5中实现。