0

谁能帮我在 EXASOL 中创建一个副本,即我需要将所有表(包括视图、函数和脚本)从一个模式复制到同一服务器中的另一个模式。例如:我希望将模式 A 中的所有数据复制而不是移动到模式 B。非常感谢。

4

2 回答 2

1

谢谢你的建议:)

为了复制模式中所有表的 DDL,我有一个简单的方法可以为我们提供所有表的 DDL:

选择 t1.CREATE_STATEMENT||t2.PK||');' from (Select C.COLUMN_TABLE,'CREATE TABLE' || C.COLUMN_TABLE ||'(' || group_concat( '“'||C.COLUMN_NAME||'“' || ' ' || COLUMN_TYPE || cas​​e when ( C.COLUMN_DEFAULT 不为空且 C.COLUMN_IS_NULLABLE='true') or(C.COLUMN_DEFAULT<>'NULL' and C.COLUMN_IS_NULLABLE='false') then 'DEFAULT' || C.COLUMN_DEFAULT 结束 || 当 C. COLUMN_IS_NULLABLE='false' then 'NOT NULL' end order by column_ordinal_position) CREATE_STATEMENT from EXA_ALL_COLUMNS C where upper(C.COLUMN_SCHEMA)=upper('Source_Schema') and column_object_type='TABLE' group by C.COLUMN_SCHEMA, C.COLUMN_TABLE order by C.COLUMN_TABLE ) t1 left join (select CONSTRAINT_TABLE,', PRIMARY KEY (' ||group_concat('“'||COLUMN_NAME||'“' 按序号位置排序)|| ')' PK 来自 EXA_ALL_CONSTRAINT_COLUMNS where constraint_type='PRIMARY KEY' and upper(CONstraint_SCHEMA)=upper('Source_Schema') group by CONSTRAINT_TABLE ) t2 on t1.COLUMN_TABLE=t2.constraint_table order by 1;

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

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

于 2018-10-26T05:53:42.543 回答
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>';

复制粘贴结果并运行它以制作实际副本。

于 2018-10-25T20:06:45.550 回答