在Exasol中创建一个架构到另一个架构的副本

时间:2018-10-24 06:30:24

标签: database exasolution

任何人都可以帮助我在EXASOL中创建副本吗,即我需要将所有表(包括视图,功能和脚本)从一个模式复制到同一服务器中的另一个模式。 例如:我希望从架构A复制的所有数据都不会移动到架构B。 非常感谢。

2 个答案:

答案 0 :(得分:0)

好,这个问题包括两个较小的问题。

1)如何复制架构中所有对象的DDL

如果仅需要复制少量模式,最快的方法是使用ExaPlus客户端。右键单击架构名称,然后选择“ CREATE DDL”。它将为您提供SQL以创建所有对象。您可以只在新架构的上下文中运行此SQL。

如果必须使其自动化,可以看一下以下官方脚本:https://www.exasol.com/support/browse/SOL-231

它为所有模式创建DDL,但它只能用于单个模式。

2)如何复制数据

这更容易。只需运行以下SQL即可为每个表生成INSERT ... SELECT语句:

SELECT 'INSERT INTO <new_schema>.' || table_name || ' SELECT * FROM <old_schema>.' || table_name || ';'
FROM EXA_ALL_TABLES
WHERE table_schema='<old_schema>';

复制粘贴结果并运行以进行实际复制。

答案 1 :(得分:0)

谢谢您的建议:)

为了复制架构中所有表的DDL,我有一种简单的方法,可以为我们提供所有表的DDL:

选择t1.CREATE_STATEMENT || t2.PK ||');'从 (选择C.COLUMN_TABLE,'CREATE TABLE'|| C.COLUMN_TABLE ||'('|| group_concat('“ || C.COLUMN_NAME ||'”'||''|| COLUMN_TYPE ||情况为(C .COLUMN_DEFAULT不为null 和C.COLUMN_IS_NULLABLE ='true')或(C.COLUMN_DEFAULT <>'NULL'和C.COLUMN_IS_NULLABLE ='false')然后 'DEFAULT'|| C.COLUMN_DEFAULT结尾|| C.COLUMN_IS_NULLABLE ='false'然后'NOT NULL'结束的情况 按column_ordinal_position排序)CREATE_STATEMENT 来自EXA_ALL_COLUMNS C 哪里 upper(C.COLUMN_SCHEMA)=上部('Source_Schema')和column_object_type ='TABLE' 按C.COLUMN_SCHEMA分组,按C.COLUMN_TABLE分组C.COLUMN_TABLE)t1左加入 (选择CONSTRAINT_TABLE,‘,PRIMARY KEY(’|| group_concat('“ ||| COLUMN_NAME ||''''按ordinal_position的顺序)||‘)’PK 来自EXA_ALL_CONSTRAINT_COLUMNS,其中 约束类型=“主键”和上层(COnstraint_SCHEMA)=上层(“源模式”,按CONSTRAINT_TABLE分组)t2 在t1.COLUMN_TABLE = t2.constraint_table 按1排序;

用您的模式名称替换Source_Schema,它将生成可以在EXAplus上运行的Create语句。

对于复制数据,我使用了您在步骤2中提到的相同方法。

相关问题