如何在PostgreSQL中防止只在一个表上进行预写日志记录?
我正在考虑在PostgreSQL中发送日志,以创建一个热备用数据库。但是,我在数据库中有一个表,它每天接收大量的插入/删除操作,但我不关心如何保护其中的数据。为了减少WAL的生成量,我想知道,有没有办法防止一张桌子上的任何活动被记录在WAL中?不幸的是,我认为没有。WAL日志在页面级别上运行,页面级别比表级别低得多,甚至不知道哪个页面包含哪个表中的数据。事实上,WAL文件甚至不知道哪些页面属于哪个数据库如何在PostgreSQL中防止只在一个表上进行预写日志记录?,postgresql,Postgresql,我正在考虑在PostgreSQL中发送日志,以创建一个热备用数据库。但是,我在数据库中有一个表,它每天接收大量的插入/删除操作,但我不关心如何保护其中的数据。为了减少WAL的生成量,我想知道,有没有办法防止一张桌子上的任何活动被记录在WAL中?不幸的是,我认为没有。WAL日志在页面级别上运行,页面级别比表级别低得多,甚至不知道哪个页面包含哪个表中的数据。事实上,WAL文件甚至不知道哪些页面属于哪个数据库 您可以考虑将您的高活动表移动到PostgreSQL完全不同的实例。这似乎很激烈,但我想不出另
您可以考虑将您的高活动表移动到PostgreSQL完全不同的实例。这似乎很激烈,但我想不出另外一种方法来避免在您的WAL文件中显示该活动。
为我自己的问题提供一个选项。有一些“临时表会在会话结束时自动删除,或者在当前事务结束时(请参见下面的提交)”我认为不会生成WAL。尽管如此,这可能不是理想的,因为表的创建和设计必须在代码中。 我会考虑使用这样的用例。你甚至可以把负载分散到一堆便宜的机器上。遇到了这个老问题,现在有了更好的答案。Postgres 9.1引入了“Unlocked Tables”,即不将DML更改记录到WAL的表。查看文档了解更多信息,但至少现在有了解决此问题的方法请参见depesz,即使没有数据更新,.临时表也会为系统目录更新(pg_类)生成WAL条目(我不确定)。您可以将繁忙的表移到其他位置,并使用dblink接口访问它,或切换到基于表的复制系统,如Slony。在9.1之前的版本中,如果在执行插入之前
截断表,这些插入也没有WAL日志记录。我认为只有在同一事务中执行截断/插入时才是如此,但更重要的是,不适用于热备用的情况,在这种情况下,插入数据仍然必须进入WAL流才能发送到另一个服务器。关于该事务,您是正确的(我认为这是不言而喻的;))不过热备份的好处是。altertable mytable SET unlocked