Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PostgreSQL中防止只在一个表上进行预写日志记录?_Postgresql - Fatal编程技术网

如何在PostgreSQL中防止只在一个表上进行预写日志记录?

如何在PostgreSQL中防止只在一个表上进行预写日志记录?,postgresql,Postgresql,我正在考虑在PostgreSQL中发送日志,以创建一个热备用数据库。但是,我在数据库中有一个表,它每天接收大量的插入/删除操作,但我不关心如何保护其中的数据。为了减少WAL的生成量,我想知道,有没有办法防止一张桌子上的任何活动被记录在WAL中?不幸的是,我认为没有。WAL日志在页面级别上运行,页面级别比表级别低得多,甚至不知道哪个页面包含哪个表中的数据。事实上,WAL文件甚至不知道哪些页面属于哪个数据库 您可以考虑将您的高活动表移动到PostgreSQL完全不同的实例。这似乎很激烈,但我想不出另

我正在考虑在PostgreSQL中发送日志,以创建一个热备用数据库。但是,我在数据库中有一个表,它每天接收大量的插入/删除操作,但我不关心如何保护其中的数据。为了减少WAL的生成量,我想知道,有没有办法防止一张桌子上的任何活动被记录在WAL中?

不幸的是,我认为没有。WAL日志在页面级别上运行,页面级别比表级别低得多,甚至不知道哪个页面包含哪个表中的数据。事实上,WAL文件甚至不知道哪些页面属于哪个数据库


您可以考虑将您的高活动表移动到PostgreSQL完全不同的实例。这似乎很激烈,但我想不出另外一种方法来避免在您的WAL文件中显示该活动。

为我自己的问题提供一个选项。有一些“临时表会在会话结束时自动删除,或者在当前事务结束时(请参见下面的提交)”我认为不会生成WAL。尽管如此,这可能不是理想的,因为表的创建和设计必须在代码中。

我会考虑使用这样的用例。你甚至可以把负载分散到一堆便宜的机器上。

遇到了这个老问题,现在有了更好的答案。Postgres 9.1引入了“Unlocked Tables”,即不将DML更改记录到WAL的表。查看文档了解更多信息,但至少现在有了解决此问题的方法


请参见depesz,即使没有数据更新,.

临时表也会为系统目录更新(pg_类)生成WAL条目(我不确定)。您可以将繁忙的表移到其他位置,并使用dblink接口访问它,或切换到基于表的复制系统,如Slony。在9.1之前的版本中,如果在执行插入之前
截断
表,这些插入也没有WAL日志记录。我认为只有在同一事务中执行截断/插入时才是如此,但更重要的是,不适用于热备用的情况,在这种情况下,插入数据仍然必须进入WAL流才能发送到另一个服务器。关于该事务,您是正确的(我认为这是不言而喻的;))不过热备份的好处是。
altertable mytable SET unlocked