Создание реплики одной схемы в другую в Exasol - PullRequest
0 голосов
/ 24 октября 2018

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

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

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

Чтобы скопировать 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_CALCC.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 именем вашей схемыd он сгенерирует оператор Create, который вы можете запустить на EXAplus.

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

0 голосов
/ 25 октября 2018

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

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

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

...