导出对象

Vertica 函数 EXPORT_OBJECTS 生成一个 SQL 脚本,您可以使用该脚本在另一个群集上重新创建非虚拟编录对象,如下所示:

EXPORT_OBJECTS( ['[destination]' [, '[scope]'] [, 'mark-ksafe']] )

SQL 脚本符合以下要求:

  • 仅包括用户有权访问的对象。

  • 根据对象依赖关系对 CREATE 语句进行排序,以便可以按正确的顺序重新创建它们。例如,如果表在非 PUBLIC 架构中,则所需的 CREATE SCHEMA 语句位于 CREATE TABLE 语句之前。同样,表的 CREATE ACCESS POLICY 语句跟在表的 CREATE TABLE 语句之后。

  • 如果可能,使用其 KSAFE 子句(如果有)创建投影,否则使用其 OFFSET 子句。

设置导出范围

EXPORT_OBJECTS scope 实参指定导出操作的范围:

导出所有对象

如果将范围参数设置为空字符串 (''),Vertica 会按依赖关系顺序从源数据库中导出所有非虚拟对象。在另一个群集中运行生成的 SQL 脚本,可创建所有引用对象及其依赖对象。

默认情况下,函数的 KSAFE 实参设置为 true。在本例中,生成的脚本调用 MARK_DESIGN_KSAFE,它复制了原始数据库的 K-safety。

=> SELECT EXPORT_OBJECTS(
     '/home/dbadmin/xtest/sql_objects_all.sql',
     '',
     'true');
           EXPORT_OBJECTS
-------------------------------------
 Catalog data exported successfully
(1 row)

SQL 脚本中包含以下类型的语句:

  • CREATE SCHEMA

  • CREATE TABLE

  • ALTER TABLE(约束)

  • CREATE PROJECTION

  • CREATE VIEW

  • CREATE SEQUENCE

  • CREATE ACCESS POLICY

  • 创建过程(存储过程)

以下输出包含输出 SQL 文件的开头和结尾,包括 MARK_DESIGN_KSAFE 语句:

CREATE SCHEMA store;
CREATE SCHEMA online_sales;
CREATE SEQUENCE public.my_seq ;
CREATE TABLE public.customer_dimension
(
    customer_key int NOT NULL,
    customer_type varchar(16),
    customer_name varchar(256),
    customer_gender varchar(8),
    title varchar(8),
    household_id int,
...

);
...
SELECT MARK_DESIGN_KSAFE(1);

导出单个对象

您可以指定一个或多个对象作为函数范围,其中多个对象是在逗号分隔的列表中指定的。任何非 PUBLIC 架构中的对象名称都必须包含它们各自的架构。要导出的对象可以包含架构、表、视图和序列。因此,SQL 脚本包含以下语句,具体取决于列出的对象及其依赖关系:

  • CREATE SCHEMA

  • CREATE TABLE

  • ALTER TABLE(用于添加约束)

  • CREATE VIEW

  • CREATE SEQUENCE

  • CREATE ACCESS POLICY

如果列出的对象有重叠的范围(例如列表包含一个表和它的一个投影),则 EXPORT_OBJECTS 只导出一次投影:


=> select export_objects ('','customer_dimension, customer_dimension_super');

                              export_objects
--------------------------------------------------------------------------
CREATE TABLE public.customer_dimension
(
    customer_key int NOT NULL,
    customer_type varchar(16),
    customer_name varchar(256),
    ...
    CONSTRAINT C_PRIMARY PRIMARY KEY (customer_key) DISABLED
);

CREATE ACCESS POLICY ON public.customer_dimension FOR COLUMN customer_address CASE WHEN enabled_role('administrator') THEN customer_address ELSE '**************' END ENABLE;

CREATE PROJECTION public.customer_dimension_super /*+basename(customer_dimension),createtype(L)*/
(
 customer_key,
 customer_type,
 customer_name,
  ...
)
AS
 SELECT customer_dimension.customer_key,
        customer_dimension.customer_type,
        customer_dimension.customer_name,
        ...
 FROM public.customer_dimension
 ORDER BY customer_dimension.customer_key
SEGMENTED BY hash(customer_dimension.customer_key) ALL NODES OFFSET 0;

SELECT MARK_DESIGN_KSAFE(0);

另请参阅

导出表