可获得性
本特性自MogDB 5.0.6版本开始引入。
特性简介
本特性支持在建表后通过ALTER TABLE语句修改表的日志属性。
客户价值
增强MogDB与Oracle的兼容性,减少应用程序的迁移代价,提升产品易用性,部分场景提升性能。
特性描述
将普通表修改为非日志表,可以在临时导入大量数据进行计算时提高导入效率。非日志表中写入的数据不会被写入到预写日志,但非日志表在冲突、执行操作系统重启、数据库重启、主备切换、切断电源操作或异常关机后会被自动截断,存在数据丢失的风险。
ALTER TABLE语法变更如下:
ALTER TABLE [ IF EXISTS ] { table_name }{
SET { LOGGED | UNLOGGED } -- PG
| { LOGGING | NOLOGGING } -- ORACLE
}
特性约束
- 分区表、列存表、临时表和全局临时表不支持修改日志属性。
- 普通表被其他普通表的外键约束引用时,不支持修改为非日志表。
- 非日志表的外键约束引用了其他非日志表时,不支持修改为普通表。
- 表日志属性修改后,索引的日志属性自动被修改。
- 本特性适用于A模式和PG模式。
示例
-- 创建logged普通表
MogDB=# create table t_logged(a integer,b text);
CREATE TABLE
MogDB=# insert into t_logged values (generate_series(1, 3), 'a'|| generate_series(1, 3));
INSERT 0 3
MogDB=# select * from t_logged order by a,b;
a | b
---+----
1 | a1
2 | a2
3 | a3
(3 rows)
MogDB=# select relname, relpersistence from pg_class where relname='t_logged';
relname | relpersistence
----------+----------------
t_logged | p
(1 row)
-- 修改为unlogged/logged表
MogDB=# alter table t_logged set unlogged;
ALTER TABLE
MogDB=# select relname, relpersistence from pg_class where relname='t_logged';
relname | relpersistence
----------+----------------
t_logged | u
(1 row)
MogDB=# alter table t_logged logging;
ALTER TABLE
MogDB=# select relname, relpersistence from pg_class where relname='t_logged';
relname | relpersistence
----------+----------------
t_logged | p
(1 row)
MogDB=# alter table t_logged nologging;
ALTER TABLE
MogDB=# select relname, relpersistence from pg_class where relname='t_logged';
relname | relpersistence
----------+----------------
t_logged | u
(1 row)
MogDB=# alter table t_logged set logged;
ALTER TABLE
MogDB=# select relname, relpersistence from pg_class where relname='t_logged';
relname | relpersistence
----------+----------------
t_logged | p
(1 row)
-- 清理环境
MogDB=# drop table if exists t_logged cascade;
DROP TABLE
相关页面
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




