一个未日志表
是一种表类型,写入其中的数据不会写入预写日志。与普通表相比,这大大提高了写入速度。
未日志表
在PostgreSQL 9.1中引入。
用法
未日志表本质上不是崩溃安全的,并且在服务器崩溃或不干净关机后会自动截断。
未日志表的元数据将复制到流复制备机,但任何尝试访问备机上的表的尝试都将引发ERROR
。如果备机提升为主机,则该表将可用。
从PostgreSQL 9.5开始,可以使用ALTER TABLE
将普通表更改为未日志表,反之亦然。
从PostgreSQL 15开始,未日志序列可用于未日志表。
更改历史记录
- PostgreSQL 18
- PostgreSQL 9.5
- 表的日志/未日志状态可以通过
ALTER TABLE
更改(f41872d0)
- 表的日志/未日志状态可以通过
- PostgreSQL 9.1
- 添加(提交53dbc27c)
示例
未日志表插入速度与普通表相比
注意:以下示例非常简单,仅用于说明未日志表上的插入速度快于日志表上的插入速度,但不会显示特定的速度比率。
postgres=# CREATE UNLOGGED TABLE unlogged_table (id int); CREATE TABLE postgres=# CREATE TABLE normal_table (id int); CREATE TABLE postgres=# \timing Timing is on. postgres=# INSERT INTO unlogged_table (id) SELECT generate_series(1,10000); INSERT 0 10000 Time: 7.107 ms postgres=# INSERT INTO normal_table (id) SELECT generate_series(1,10000); INSERT 0 10000 Time: 32.574 ms
参考文献
- PostgreSQL 文档: CREATE TABLE
有用链接
- PostgreSQL 未日志表 - 瞧,没有 WAL! - Greg Sabino Mullane / Crunchy Data 于 2023 年 2 月发布的博文
- PostgreSQL 9.1 中未日志表的性能 - Michael Paquier 于 2011 年 10 月发布的博文
另请参阅
CREATE TABLE,初始化分支,未日志序列