tencent cloud

云数据库 PostgreSQL

动态与公告
产品动态
产品简介
产品概述
产品特性
产品优势
应用场景
信息安全说明
地域和可用区
产品功能列表
大版本生命周期说明
MSSQL 兼容版
产品计费
计费概述
实例类型与规格
购买方式
退费说明
欠费说明
备份空间收费说明
快速入门
创建 PostgreSQL 实例
连接 PostgreSQL 实例
管理 PostgreSQL 实例
数据导入
通过 DTS 迁移数据
内核能力介绍
内核版本概述
内核版本更新动态
查看内核版本
自研内核功能介绍
数据库审计
审计服务说明
开通审计服务
查看审计日志
修改审计服务
审计性能说明
用户指南
实例管理
升级实例
CPU 弹性扩容
只读实例
账号管理
数据库管理
参数管理
日志管理及分析
备份与恢复
数据迁移
插件管理
网络管理
访问管理
数据安全
租户及资源隔离
安全组
监控与告警
标签
AI 实践
使用 tencentdb_ai 插件调用大模型
使用 tencentdb_ai 插件构建 AI 应用
结合 Supabase 快速构建基于云数据库 PostgreSQL 的后端服务
实践教程
跨库访问
如何在 PostgreSQL 中自动创建分区
基于 pg_roaringbitmap 实现超大规模标签查找
一条 SQL 实现查询附近的人
如何配置云数据库 PostgreSQL 作为 GitLab 外部数据源
通过 cos_fdw 插件支持分级存储能力
通过 pgpool 实现读写分离
通过 auto_explain 插件实现慢 SQL 分析
使用 pglogical 进行逻辑复制
使用 Debezium 采集 PostgreSQL 数据
在 CVM 本地搭建 PostgreSQL 异地灾备环境
只读实例与只读组实践教程
如何使用云函数定时操作数据库
表膨胀处理
性能白皮书
测试方法
测试结果
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Read-only Replica APIs
Backup and Recovery APIs
Parameter Management APIs
Security Group APIs
Performance Optimization APIs
Account APIs
Specification APIs
Network APIs
Data Types
Error Codes
常见问题
相关协议
Service Level Agreement
Terms of Service
词汇表
联系我们
文档云数据库 PostgreSQL用户指南参数管理云数据库 PostgreSQL UNLOGGED 表使用说明

云数据库 PostgreSQL UNLOGGED 表使用说明

PDF
聚焦模式
字号
最后更新时间: 2026-01-26 14:16:08

UNLOGGED 表说明

UNLOGGED 表特点

1. 什么是 UNLOGGED 表
UNLOGGED 表是 PostgreSQL 提供的一种特殊表类型,其特点是不记录 WAL(Write-Ahead Log)日志,以换取更高的写入性能。
2. UNLOGGED 表特性
性能特性
写入性能提升:跳过 WAL 日志记录
减少 I/O 开销:无需等待日志刷盘
降低存储压力:减少 WAL 日志空间占用
数据特性
数据仍写入磁盘:正常的数据文件存储
不保证持久性:数据库重启后数据丢失
不支持复制:不会同步到从库
3. 识别 UNLOGGED 表
-- 查看表类型
SELECT
schemaname,
tablename,
CASE
WHEN relpersistence = 'u' THEN 'UNLOGGED'
WHEN relpersistence = 'p' THEN 'PERMANENT'
ELSE 'OTHER'
END as table_type
FROM pg_tables t
JOIN pg_class c ON c.relname = t.tablename
WHERE schemaname = 'public';

UNLOGGED 表风险

1. 数据安全风险
数据丢失风险
服务器重启:所有 UNLOGGED 表数据清空
数据库崩溃:异常关闭导致数据丢失
硬件故障:无法通过 WAL 日志恢复
2. 高可用性限制
主从复制问题
从库数据为空:UNLOGGED 表不会同步到从库
故障切换风险:主从切换后数据丢失
3. 备份恢复限制
备份策略限制
逻辑备份:pg_dump 默认不包含 UNLOGGED 表数据
物理备份:基础备份不包含 UNLOGGED 表数据
时间点恢复:无法恢复 UNLOGGED 表的历史数据
4. 功能兼容性限制
不支持的功能
逻辑复制:无法作为发布表
发布/订阅:不支持逻辑解码
某些扩展:部分扩展可能不兼容

UNLOGGED 表使用场景

1. 适合使用的场景
ETL 数据处理
缓存和会话存储
临时计算和统计
2. 性能优化场景
大批量数据导入
临时索引构建
3. 不适合使用的场景
重要业务数据
需要持久化的配置数据

将 UNLOGGED 表转 LOGGED 表

1. 转换语法
基本转换命令如下:
-- 将 UNLOGGED 表转换为普通表,unlogged_table_name 为表名称
ALTER TABLE unlogged_table_name SET LOGGED;

-- 锁定状态监控, mode 字段为锁类型,AccessExclusiveLock 为最严格的锁, unlogged_table_name 为表名称
SELECT
l.locktype,
l.mode,
l.granted,
l.pid,
a.state,
a.query_start,
now() - a.query_start as duration,
CASE
WHEN l.granted THEN 'GRANTED'
ELSE 'WAITING'
END as lock_status,
substring(a.query, 1, 80) as query_snippet
FROM pg_locks l
LEFT JOIN pg_stat_activity a ON l.pid = a.pid
WHERE l.relation IS NOT NULL
AND EXISTS (
SELECT 1 FROM pg_class c
WHERE c.oid = l.relation
AND c.relname = 'unlogged_table_name'
)
ORDER BY l.granted, a.query_start;
2. 转换注意事项
转换过程:需要重写整个表
锁定时间:大表转换时间较长,期间表被锁定
空间需求:转换期间需要额外存储空间
3. 转换最佳实践
建议采用分批转换策略,示例如下:
-- 对于大表,建议分批转换
-- 1. 创建新的 LOGGED 表
CREATE TABLE user_cache_new (LIKE user_cache);

-- 2. 分批迁移数据
INSERT INTO user_cache_new
SELECT * FROM user_cache
WHERE created_at >= '2024-01-01' AND created_at < '2024-01-02';

-- 3. 重命名表
BEGIN;
DROP TABLE user_cache;
ALTER TABLE user_cache_new RENAME TO user_cache;
COMMIT;

云数据库 PostgreSQL 参数说明

云数据库 PostgreSQL 通过引入 tencentdb_log_unlogged_table 参数,在保持 PostgreSQL 原生功能的同时,为用户提供了更好的数据安全保障。参数修改请参考 设置实例参数
注意:
生产环境建议保持 tencentdb_log_unlogged_table = on。
建议定期检查和监控现有 UNLOGGED 表并及时转换
该特性支持的版本为 v11.22_r1.26、v12.22_r1.29、v13.20_r1.24、v14.17_r1.33、v15.12_r1.18、v16.8_r1.13、v17.4_r1.7、v18.0_r1.0及以上版本,建议您尽快 升级内核小版本

参数功能说明

当 tencentdb_log_unlogged_table = on 时(默认):
所有新创建的 UNLOGGED 表自动转换为 LOGGED 表
用户创建 UNLOGGED 表时显示 WARNING 提示
现有的 UNLOGGED 表保持不变(需手动转换)
提供更高的数据安全性
-- 创建 UNLOGGED 表
amy=> CREATE UNLOGGED TABLE test_table (id INT, data TEXT);
-- 系统提示 WARNING :
WARNING: change unlogged table to logged table, If you want to use unlogged tables, please set tencentdb_log_unlogged_table to false.
CREATE TABLE
-- 验证表类型,返回: 'p' (PERMANENT/LOGGED)
am=> SELECT relpersistence FROM pg_class WHERE relname = 'test_table';
relpersistence
----------------
p
(1 row
当 tencentdb_log_unlogged_table = off 时:
所有行为与原生 PostgreSQL 一致
允许创建真正的 UNLOGGED 表
用户需自行承担数据丢失风险

常见问题 FAQ

修改 tencentdb_log_unlogged_table 参数是否需要重启实例?

不需要。该参数为动态参数,修改后立即生效。

参数设置为 on 后,现有的 UNLOGGED 表会自动转换吗?

不会。参数只影响新创建的表,现有 UNLOGGED 表需要手动执行 ALTER TABLE SET LOGGED 转换。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈