【发布时间】:2018-10-26 13:53:42
【问题描述】:
谁能帮我在 EXASOL 中创建一个副本,即我需要将所有表(包括视图、函数和脚本)从一个模式复制到同一服务器中的另一个模式。 例如:我希望模式 A 中的所有数据都被复制而不是移动到模式 B。 非常感谢。
【问题讨论】:
标签: database exasolution
谁能帮我在 EXASOL 中创建一个副本,即我需要将所有表(包括视图、函数和脚本)从一个模式复制到同一服务器中的另一个模式。 例如:我希望模式 A 中的所有数据都被复制而不是移动到模式 B。 非常感谢。
【问题讨论】:
标签: database exasolution
感谢 Wildraid 的建议 :)
为了复制模式中所有表的 DDL,我有一个简单的方法可以为我们提供所有表的 DDL:
选择 t1.CREATE_STATEMENT||t2.PK||');'从 (选择 C.COLUMN_TABLE,'CREATE TABLE ' || C.COLUMN_TABLE ||'(' || group_concat( '“'||C.COLUMN_NAME||'“' || ' ' || COLUMN_TYPE || case when (C .COLUMN_DEFAULT 不为空 和 C.COLUMN_IS_NULLABLE='true') or(C.COLUMN_DEFAULT'NULL' and C.COLUMN_IS_NULLABLE='false') 然后 '默认' || C.COLUMN_DEFAULT 结束 ||当 C.COLUMN_IS_NULLABLE='false' 然后 'NOT NULL' 结束时的情况 按 column_ordinal_position 排序)CREATE_STATEMENT 从 EXA_ALL_COLUMNS C 在哪里 上(C.COLUMN_SCHEMA)=上('Source_Schema')和column_object_type='TABLE' 按 C.COLUMN_SCHEMA 分组,按 C.COLUMN_TABLE 排序 C.COLUMN_TABLE ) t1 左连接 (select CONSTRAINT_TABLE,', PRIMARY KEY (' ||group_concat('“'||COLUMN_NAME||'“' order by ordinal_position) || ')' PK 从 EXA_ALL_CONSTRAINT_COLUMNS 哪里 constraint_type='PRIMARY KEY' 和 upper(CONstraint_SCHEMA)=upper('Source_Schema') 按 CONSTRAINT_TABLE 分组) t2 在 t1.COLUMN_TABLE=t2.constraint_table 按 1 排序;
将 Source_Schema 替换为您的架构名称,它将生成您可以在 EXAplus 上运行的 Create 语句。
对于复制数据,我使用了与您在第 2 步中提到的相同的方式。
【讨论】:
好的,这个问题包含两个较小的问题。
1) 如何复制schema中所有对象的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>';
复制粘贴结果并运行它以制作实际副本。
【讨论】: