繁体   English   中英

Postgres:将表改为未记录

[英]Postgres: alter table to unlogged

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

CREATE UNLOGGED TABLE your_table_unlogged AS SELECT * FROM your_table;

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

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

如果wal_level > minimal ,则从UNLOGGED转换为LOGGED需要将整个表的数据写入xlog,以便副本获得副本。 所以它不是免费的,但它仍然值得创建一个未记录的表,填充它然后设置它记录如果你有一堆清理和删除和合并工作在初始加载后在表上做。


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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM