Ответ 1
Хотя это напрямую не отвечает на этот вопрос, я считаю, что это обеспечит решение основной задачи: извлечение DDL.
Предполагаем следующее: оболочка script, поэтому требуется соответствующая среда (OS X, Linux, cygwin)
Шаги:
- Установите сценарии командной строки (следуйте инструкциям здесь)
-
Создайте следующий пользовательский script в том же каталоге, что и google_sql.sh:
GOOGLE_CLOUD_SQL_INSTANCE=test:test echo "SELECT CONCAT('SELECT CONCAT(\"SHOW CREATE TABLE ',schema_name,'.\",table_name,\";\") \"select \\\\\"use ',schema_name,';\\\\\";\" FROM information_schema.tables WHERE table_schema = \"',schema_name,'\";') 'use information_schema;' FROM SCHEMATA WHERE schema_name NOT IN ('information_schema','mysql','performance_schema');" >> $$.1.get_schema.sql ./google_sql.sh $GOOGLE_CLOUD_SQL_INSTANCE information_schema < $$.1.get_schema.sql > $$.2.show_create.sql ./google_sql.sh $GOOGLE_CLOUD_SQL_INSTANCE information_schema < $$.2.show_create.sql > $$.3.sql.out ./google_sql.sh $GOOGLE_CLOUD_SQL_INSTANCE information_schema < $$.3.sql.out > $$.4.create.raw awk -F" " '/Table Create Table/{print "";} /CREATE/{sub(/^..*CREATE TABLE/,"CREATE TABLE");print $0} $1 == "" {print $0} /^\)/{print $0";"} /^use/{print $0}' $$.4.create.raw > $GOOGLE_CLOUD_SQL_INSTANCE.ddl.sql rm $$.*
-
Замените "test: test" в script на свой идентификатор экземпляра Google Cloud
- Выполните script, чтобы создать файл формата "test: test".ddl.sql, который будет иметь DDL для всех таблиц во всех базах данных.