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

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

时间:2024-04-01 14:44:24浏览次数:18  
标签:customer enmo no t1 table 磁盘 openGauss MOT

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=>

标签:customer,enmo,no,t1,table,磁盘,openGauss,MOT
From: https://www.cnblogs.com/helloopenGauss/p/18108378

相关文章

  • MogDB/openGauss如何实现事务的rollback
    MogDB/openGauss如何实现事务的rollback本文出处:https://www.modb.pro/db/113262数据库最主要的功能就是存储数据,然而我们在进行数据库操作时,却很容易发生误操作数据的情况,那么在MogDB中该如何实现误操作数据恢复呢?本文通过具体示例简要介绍如何通过回滚还原到误操作前的状......
  • openGauss每日一练第6天
    学习地址https://www.modb.pro/course/133学习目标学习openGauss创建模式、修改模式属性和删除模式模式是一组数据库对象的集合,主要用于控制对数据库对象的访问课后作业1.创建一个名为tpcds的模式SQL文本:createschematpcds;\dntpcdsomm=#createschematpcds;C......
  • MogDB/openGauss数据库package关键字的两种用法
    MogDB/openGauss数据库package关键字的两种用法本文出处:https://www.modb.pro/db/237701package关键字在MogDB数据库里有两种用法:package包,分为PackageSpecification和PackageBody。注意:需要在Oracle兼容下(dbcompatibility=‘A’)package属性,用于存储过程重......
  • macOS 磁盘设备文件命名规则
    macOS系统使用不同于Linux的磁盘设备命名规则。在macOS中,磁盘设备和分区被命名并通过/dev目录访问,类似于Linux和UNIX系统。但是,macOS的命名规则遵循特定的模式。macOS磁盘设备命名概述:1.主磁盘设备在macOS中,主磁盘通常被命名为/dev/disk0。这个设备是你的主启......
  • 19_U盘挂载和磁盘分区
    U盘挂载和磁盘分区U盘挂载步骤一:保证U盘或者TF的格式为FAT32格式,TF卡要用读卡器和电脑连接。步骤二:把U盘或者TF卡连接到VM软件上,然后使用df命令确定挂载的路径。步骤三:把U盘或者TF卡连接到开发板,TF使用读卡器和开发板连接。使用df命令查看一下文件系统是不是......
  • DEVASC提示remote: Support for password authentication was removed on August 13,
    意思是:对密码身份验证的支持已于2021年8月13日移除。解决:在git仓库文件夹下使用ssh密钥验证:gitremotermorigin   ---将名为"origin"的远程仓库从本地Git仓库中移除[email protected]:GithubName/repositoryName.git   ---将名......
  • 在Linux中,如何查看系统的磁盘使用情况?
    在Linux系统中,查看磁盘使用情况是非常重要的系统管理任务之一,它有助于了解磁盘空间的分配和使用情况,以便进行合理的磁盘空间管理。以下是几种常用的查看磁盘使用情况的方法:1.df命令df(DiskFree)命令用于显示文件系统的磁盘空间占用情况。它可以报告各个挂载点的总空间、已用空......
  • 《手把手教你》系列技巧篇(六十二)-java+ selenium自动化测试-RemoteWebDriver让你的代
    1.简介当本机上没有浏览器,需要远程调用浏览器进行自动化测试时,需要用到RemoteWebDirver。宏哥申请服务器还没有下来,也懒得自己在本地安装虚拟机,等的时间太长了于是就网上找了一个可以免费试用2天的服务器(网址:DedicatedServerHostingService|BareMetal|Varidata),注册一......
  • 计算linux磁盘空间
     可以准确获取某个挂载点的硬盘空间,已使用空间。现在问题就出在挂载点的判断和类型过滤上面。 #include<iostream>#include<fstream>#include<sstream>#include<vector>#include<string>#include<sys/statvfs.h>#include<map>structDISK_......
  • 存储系统-cache-磁盘
    计算机采用分级存储体系的主要目的是为了解决存储容量、成本和速度之间的矛盾问题。两级存储:Cache-主存、主存-辅存(虚拟存储体系)。局部性原理:总的来说,在CPU运行时,所访问的数据会趋向于一个较小的局部空间地址内,包括下面两个方面:时间局部性原理:如果一个数据项正在被访问......