openGauss 数据库将磁盘表转换为 MOT

一、将磁盘表转换为 MOT 方法

磁盘表直接转换为 MOT 尚不能实现,这意味着尚不存在将基于磁盘的表转换为 MOT 的 ALTER TABLE 语句。目前 MOT 表也不支持 rename,create as select 以及 insert select(普通表)的操作。将基于磁盘的表转换为 MOT 方法,可以使用 gs_dump 工具导出数据,再使用 gs_restore 工具导入数据的方法。

步骤如下: 1.暂停应用程序活动。 2.使用 gs_dump 工具将表数据转储到磁盘的物理文件中。请确保使用 data only。 3.重命名原始基于磁盘的表。 4.创建同名同模式的 MOT。 5.使用 gs_restore 将磁盘文件的数据加载/恢复到数据库表中。 6.浏览或手动验证所有原始数据是否正确导入到新的 MOT 中。 7.恢复应用程序活动。

二、操作示例:将表 enmo.customer_t1 转换为 MOT 表

1.确认 MOT 表支持表 customer_t1 所有列的数据类型

enmo=> \d

List of relations

Schema | Name | Type | Owner | Storage

--------+--------------+-------+-------+----------------------------------

enmo | all_data | table | enmo | {orientation=row,compression=no}

enmo | customer_t1 | table | enmo | {orientation=row,compression=no}

enmo | cux_setting | table | enmo | {orientation=row,compression=no}

enmo | data_studio1 | table | enmo | {orientation=row,compression=no}

enmo | table2 | table | enmo | {orientation=row,compression=no}

public | table1 | table | enmo | {orientation=row,compression=no}

(6 rows)

enmo=> \d+ customer_t1

Table "enmo.customer_t1"

Column | Type | Modifiers | Storage | Stats target | Description

-----------------+-----------------------+-----------+----------+--------------+-------------

c_customer_sk | integer | | plain | |

c_customer_name | character varying(32) | | extended | |

Has OIDs: no

Options: orientation=row, compression=no

enmo=>

2.暂停表 customer_t1 相关的应用程序操作后,使用 gs_dump 命令导出表数据(仅数据):

$ gs_dump -U enmo -h ... -p 15400 enmo -a --table customer_t1 -F c -f /home/omm/dump/customer_t1_data_only.bak

Password:

gs_dump[port='15400'][enmo][2021-03-28 10:11:42]: dump database enmo successfully

gs_dump[port='15400'][enmo][2021-03-28 10:11:42]: total time: 8732 ms

3.重命名原表 customer_t1 为 customer

enmo=> alter table customer_t1 rename to customer;

ALTER TABLE

4.创建与原表相同数据格式的 MOT 表 customer_t1

--首先给enmo用于赋予创建和访问MOT(DDL、DML、SELECT)权限:

enmo=> GRANT USAGE ON FOREIGN SERVER mot_server TO enmo;

GRANT

--创建外部表

enmo=> CREATE foreign TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));

CREATE FOREIGN TABLE

Time: 9.408 ms

enmo=> \d+

List of relations

Schema | Name | Type | Owner | Size | Storage | Description

--------+--------------+---------------+-------+------------+----------------------------------+-------------

enmo | all_data | table | enmo | 8192 bytes | {orientation=row,compression=no} |

enmo | customer | table | enmo | 8192 bytes | {orientation=row,compression=no} |

enmo | customer_t1 | foreign table | enmo | 16 kB | |

enmo | cux_setting | table | enmo | 160 kB | {orientation=row,compression=no} |

enmo | data_studio1 | table | enmo | 8192 bytes | {orientation=row,compression=no} |

enmo | table2 | table | enmo | 8192 bytes | {orientation=row,compression=no} |

public | table1 | table | enmo | 8192 bytes | {orientation=row,compression=no} |

(7 rows)

enmo=> \d+ customer_t1

Foreign table "enmo.customer_t1"

Column | Type | Modifiers | FDW Options | Storage | Stats target | Description

-----------------+-----------------------+-----------+-------------+----------+--------------+-------------

c_customer_sk | integer | | | plain | |

c_customer_name | character varying(32) | | | extended | |

Server: mot_server

FDW permition: read/write

Has OIDs: no

enmo=> select * from customer_t1;

c_customer_sk | c_customer_name

---------------+-----------------

(0 rows)

Time: 0.782 ms

enmo=>

5.使用 gs_restore 将磁盘文件的数据加载/恢复到数据库表中

$ gs_restore -U enmo -h ... -p 15400 -d enmo /home/omm/dump/customer_t1_data_only.bak

Password:

start restore operation ...

table customer_t1 complete data imported !

Finish reading 3 SQL statements!

end restore operation ...

restore operation successful

total time: 3697 ms

6.浏览或手动验证所有原始数据是否正确导入到新的 MOT 中

enmo=> select * from customer_t1;

c_customer_sk | c_customer_name

---------------+-----------------

0 | data 0

2 | data 2

1 | new Data

(3 rows)

Time: 0.587 ms

enmo=>

openGauss数据库将磁盘表转换为MOT的更多相关文章

  1. MySQL中查询所有数据库占用磁盘空间大小和单个库中所有表的大小的sql语句

    查询所有数据库占用磁盘空间大小的SQL语句: ,),' MB') as data_size, concat(,),'MB') as index_size from information_schema ...

  2. 用java语言将数据库中的数据表转换为xml文件的通用程序(细化)

    转自:https://www.cnblogs.com/wudage/p/7650685.html 总是在网络上copy别人的源代码,今天我也贴出自己今天写的源码,相信这个程序会对大家在平时的工作中需要 ...

  3. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  4. wordpress数据库优化wp_posts表 OPTIMIZE

    wordpress数据库优化wp_posts表 对 MySQL 数据记录进行插入.更新或删除时,会占有不同大小的空间,记录就会变成碎片,且留下空闲的空间.就像具有碎片的磁盘,会降低性能,需要整理,因此 ...

  5. (转)分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  6. MySQL之终端(Terminal)管理数据库、数据表、数据的基本操作(转)

    MySQL有很多的可视化管理工具,比如“mysql-workbench”和“sequel-pro-”. 现在我写MySQL的终端命令操作的文章,是想强化一下自己对于MySQL的理解,总会比使用图形化的 ...

  7. c#创建access数据库和数据表

      由于在程序中使用了ADOX,所以先要在解决方案中引用之,方法如下: 解决方案资源管理器(项目名称)-->(右键)添加引用-->COM--> Microsoft ADO Ext. ...

  8. oracle下的数据库实例、表空间、用户及其表的区分

    完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等): 2) Oracle数据库实例则是一组Ora ...

  9. Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ578473688/article/details/54561397 思路1:采用备份表 备份表中 ...

  10. Oracle数据表转换为Shapefile(二)

    在上一篇博文<Oracle数据表转换为Shapefile(一)>中详细描述了一种基于Oracle数据表生产Shapefile的技术方法,本文同样以详细图解的方式描述一种更便捷的方法来完成同 ...

随机推荐

  1. 【Azure API 管理】讨论APIM是否适合直接存储文件到Azure Storage Account呢?

    问题描述 需要从 APIM 直接将大文件存入Azure Storage,没看到这方面的官方文档,所以是否有这方面的实践案例,或者APIM是否支持引用SDK (如Azure Storage SDK)? ...

  2. 【Azure Developer】使用Key Vault的过程中遇见的AAD 认证错误

    在使用应用程序访问Key Vault获取密钥信息时,现后遇见了多种认证错误.使用的代码为: String keyVaultUrl = "https://test-xxx.vault.azur ...

  3. 【转载】大数据OLAP系统--开源组件方案对比

    开源大数据OLAP组件,可以分为MOLAP和ROLAP两类.ROLAP中又可细分为MPP数据库和SQL引擎两类.对于SQL引擎又可以再细分为基于MPP架构的SQL引擎和基于通用计算框架的SQL引擎: ...

  4. docker部署监控Prometheus+Grafana

    目录 一.Prometheus简介 二.Prometheus基本原理 三.Prometheus架构图 四.Prometheus特性 五.Prometheus组件 六.Prometheus服务发现 七. ...

  5. 在Visual Studio 中使用git系列文章目录

    在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...

  6. 使用 Docker 部署 MrDoc 在线文档管理系统

    1)MrDoc 介绍 MrDoc 简介 MrDoc 觅思文档:https://mrdoc.pro/ MrDoc 使用手册:https://doc.mrdoc.pro/p/user-guide/ MrD ...

  7. 【5分钟】W10 64bit系统本地安装postgresql 11

    1.下载 官网下载地址 2.安装 一路默认,有一个选语言的可以选中chinese simple(中文简体). 3.初始化 1)进入bin:   cd C:\Program Files\PostgreS ...

  8. 封装svg通用组件

    安装vite-plugin-svg-icons插件 pnpm i vite-plugin-svg-icons -D 在main.ts中引入vite-plugin-svg-icons import 'v ...

  9. 记一次docker安装Jenkins

    docker安装Jenkins 0. 下载docker镜像 docker search jenkins docker pull jenkins/jenkins:lts 1. 安装步骤 创建映射文件夹 ...

  10. c语言中int和char之间的转换实例解析

    壹:     经常用到c,积累一些小函数,免得下次还要重新写,极大的提升工作效率啊. 贰:    代码很简单,直接上源码: #include <stdio.h> typedef unsig ...