Получение ПОКАЗАТЬ СОЗДАТЬ ТАБЛИЦУ из представления, как если бы это была таблица

#mysql #mysql-8.0

Вопрос:

У меня есть доступ к удаленной базе данных, и я хотел бы сбросить схему и данные нескольких представлений на свой локальный компьютер и загрузить их в свою локальную базу данных в виде таблиц быстрым и простым способом.

Мне не хватает привилегий пользователя для запуска CREATE TABLE AS (SELECT * FROM target_view) , иначе это было бы тривиально решить. Другими словами, я хочу получить и воссоздать «составную» схему target_view, как если бы это была таблица.

Я не хочу выводить SHOW CREATE VIEW , так как это показывает только сложную SELECT инструкцию с соединениями с различными таблицами на удаленном компьютере, доступ к которому у меня ограничен. И проблема, которую я вижу в MySQL 8.x, заключается в том, что когда я запускаю SHOW CREATE TABLE представление, эта команда просто действует как псевдоним SHOW CREATE VIEW (что разумно).

К сожалению, я могу запустить DESCRIBE и увидеть схему этих представлений в том виде, в каком они были таблицами. Мне действительно просто нужно преобразовать эту информацию в CREATE TABLE инструкцию, не имея возможности выполнить CREATE TABLE ее .

В случае, если это не было очевидно, главное-избежать ручной реконструкции табличных схем этих представлений (поскольку они могут измениться в будущем). Я также хочу избежать решения обратной разработки общей конструкции таблицы из 20-30 общих столбцов VARCHAR или текста из дампа CSV.

Комментарии:

1. Вы можете найти хороший ответ на этот вопрос по адресу dba.stackexchange.com. Это пограничный вопрос «администратора».

2. Есть ли у вас привилегии для запуска СОЗДАТЬ ВРЕМЕННУЮ ТАБЛИЦУ? Для этого не требуется привилегия СОЗДАНИЯ.

3. @BillKarwin отличное предложение, но нет, я получаю ошибку «Отказано в доступе».

4. Хорошо, тогда у вас тоже может не быть этой привилегии. Вы можете подтвердить SHOW GRANTS это заявлением.

Ответ №1:

Я не знаю никакого способа отображения метаданных результирующего набора в синтаксисе СОЗДАНИЯ ТАБЛИЦЫ.

Что бы я сделал, учитывая ваши обстоятельства, сначала создайте в своем локальном экземпляре MySQL базовую таблицу и представление, затем вы можете использовать CREATE TABLE AS SELECT ... синтаксис для создания конкретной таблицы, соответствующей метаданным результирующего набора представления.