Создание реплики одной схемы в другую в Exasol

Может ли кто-нибудь помочь мне с созданием реплики в EXASOL, т.е. мне нужно скопировать все таблицы, включая представления, функции и сценарии из одной схемы в другую схему на том же сервере. Например, я хочу, чтобы все данные со схемы A были скопированы, а не перемещены в схему B. Большое спасибо.

2 ответа

Спасибо, дикий страх за ваше предложение:)

Чтобы скопировать DDL всех таблиц в схеме, у меня есть простой способ, который даст нам DDL для всех таблиц:

выберите t1.CREATE_STATEMENT||t2.PK||');' from (Выберите C.COLUMN_TABLE, 'CREATE TABLE' || C.COLUMN_TABLE ||'(' || group_concat('“' ||C.COLUMN_NAME||'“' || ' ' || COLUMN_TYPE || случай, когда (C.COLUMN_DEFAULT не является нулевым, и C.COLUMN_IS_NULLABLE= 'true') или (C.COLUMN_DEFAULT<> 'NULL' и C.COLUMN_IS_NULLABLE= 'false') тогда ' DEFAULT ' || C.COLUMN_DEFAULT end || COLUMN_IS_NULLABLE = 'false', тогда конечный порядок 'NOT NULL' по column_ordinal_position) CREATE_STATEMENT из EXA_ALL_COLUMNS C, где верхняя (C.COLUMN_SCHEMA)= верхняя ('Source_Schema') и column_object_type= 'TABLE__CABLE_COLC_NOWN_CABLE_CALC C.COLUMN_TABLE) t1 левое соединение (выберите CONSTRAINT_TABLE, ', PRIMARY KEY (' || group_concat ('“' ||COLUMN_NAME||'“' упорядочьте по порядковому расположению) || ')' PK из EXA_ALL_CONSTRAINT_COLUMNS, где constraint_type= PRIM 'и верхняя (COnstraint_SCHEMA)= верхняя (' Source_Schema ') группа по CONSTRAINT_TABLE) t2 на t1.COLUMN_TABLE=t2.constraint_table заказывается на 1;

Замените Source_Schema на имя вашей схемы, и он сгенерирует оператор Create, который вы можете запустить в EXAplus.

Для копирования данных я использовал тот же способ, который вы упомянули на шаге 2.

Хорошо, этот вопрос состоит из двух небольших проблем.

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>';

Скопируйте и вставьте результат и запустите его, чтобы сделать реальную копию.

Другие вопросы по тегам