未记录表 是一种表类型,写入其中的数据不会被写入 写前日志。与普通表相比,这能显著提高写入速度。
未记录表 在 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! - 2023 年 2 月 Greg Sabino Mullane / Crunchy Data 的博客文章
- PostgreSQL 9.1 中的未记录表性能 - 2011 年 10 月 Michael Paquier 的博客文章
另请参阅
CREATE TABLE, 初始化分叉, 未记录序列
