将磁盘表转换为MOT

    下面介绍如何手动将基于磁盘的表转换为MOT,如何使用gs_dump工具导出数据,以及如何使用gs_restore工具导入数据。

    检查待转换为MOT的磁盘表的模式是否包含所有需要的列。

    检查架构是否包含任何不支持的列数据类型,具体参见“不支持的数据类型”章节。

    如果不支持特定列,则建议首先创建一个更新了模式的备磁盘表。此模式与原始表相同,只是所有不支持的类型都已转换为支持的类型。

    要将基于磁盘的表转换为MOT,请执行以下步骤:

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

    假设要将数据库benchmarksql中一个基于磁盘的表customer迁移到MOT中。

    将customer表迁移到MOT,操作步骤如下:

    1. 请检查源表数据。

      1. ---+---
      2. 1 | 2
      3. 3 | 4
      4. (2 rows)
    2. 只能使用gs_dump转储表数据。

    3. 重命名源表。

      1. benchmarksql=# alter table customer rename to customer_bk;
      2. ALTER TABLE
    4. 创建与源表完全相同的MOT。

      1. restore operation successful
      2. total time: 24 ms
      3. benchmarksql=# select * from customer;
      4. x | y
      5. ---+---
      6. 1 | 2
      7. (2 rows)
      8. benchmarksql=# \d
      9. List of relations
      10. Schema | Name | Type | Owner | Storage
      11. --------+-------------+---------------+--------+----------------------------------
      12. public | customer | foreign table | aharon |