文档中心MogDBMogDB StackUqbar
v5.0

文档:v5.0

支持的版本:

其他版本:

支持在建表后修改表日志属性

可获得性

本特性自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

相关页面

ALTER TABLE

Copyright © 2011-2024 www.enmotech.com All rights reserved.