当PostgreSQL在崩溃的情况下“截断”一个未记录的表时,这意味着什么?

tgabmvqs  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(130)

The PostgreSQL documentation声明:
未记录的表在崩溃或非正常关机后自动截断
在这种情况下,“truncate”到底是什么意思?它和TRUNCATE statement一样吗?
我的印象是,未记录的表仍然是持久化的,但只是没有写入WAL -但措辞听起来像是已经持久化到磁盘的数据将在崩溃时被删除或丢失。但我不明白为什么/如何持久化到磁盘的数据会受到影响。

brqmpdu1

brqmpdu11#

如果没有WAL日志,就无法知道数据在崩溃后的状态。毕竟,这就是拥有WAL的意义所在。因此,没有WAL的唯一安全的做法是截断数据,保留定义的表,但像TRUNCATE一样为空。
如果有一种方法可以冻结表,使其成为只读的,那么(一旦运行了最终检查点)在崩溃后就可以安全地离开它,这将是很好的,但是没有这样的机制。

相关问题