DISCLAIMER: Je ne suis pas Ruby-on-Rails programmeur
strictement en termes de MySQL, vous avez deux des moyens pour extraire des procédures stockées (SP) et les fonctions stockées (SF).
Gardez à l'esprit que mysql.proc et information_schema.routines fournissent le boîtier sur le disque et en mémoire pour SPs. Pourtant, il y a 2 instructions SQL pour les récupérer: SHOW CREATE PROCEDURE et SHOW CREATE FUNCTION.
La première consiste à recueillir tous les PS et en utilisant mysql.proc et FS les former dans les instructions SQL qui les exposent.
Exemple I ont 6 et 2 SPs dans ma base de données FS de test. Voici comment générer SQL pour les 8 routines:
mysql> SELECT CONCAT('SHOW CREATE ',type,' `',db,'`.`',name,'`\\G') SQLStatements FROM mysql.proc;
+-----------------------------------------------------+
| SQLStatements |
+-----------------------------------------------------+
| SHOW CREATE PROCEDURE `test`.`CreateSampleTable`\G |
| SHOW CREATE PROCEDURE `test`.`CreateSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`GetMissingIntegers`\G |
| SHOW CREATE FUNCTION `test`.`GetTestTableCounts`\G |
| SHOW CREATE PROCEDURE `test`.`ImportWeeklyBatch`\G |
| SHOW CREATE FUNCTION `test`.`InsertName`\G |
| SHOW CREATE PROCEDURE `test`.`LoadSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`MigrateColumn`\G |
+-----------------------------------------------------+
8 rows in set (0.00 sec)
Vous pouvez faire défiler et recueillir le code nécessaire pour chaque procédure stockée et la fonction.
Déclencheurs doivent être collectés séparément.
5.x MySQL vous pouvez gagner des déclencheurs à l'aide de cette requête:
mysql> SELECT CONCAT('SHOW CREATE TRIGGER `',trigger_schema,'`.`',trigger_name,'`\\G') SQLStatements FROM information_schema.triggers;
+--------------------------------------------------+
| SQLStatements |
+--------------------------------------------------+
| SHOW CREATE TRIGGER `test`.`AddPermTempKey`\G |
| SHOW CREATE TRIGGER `test`.`DeletePermTempKey`\G |
+--------------------------------------------------+
ou pour gagner du temps UNION les deux instructions SQL
mysql> SELECT CONCAT('SHOW CREATE ',type,' `',db,'`.`',name,'`\\G') SQLStatements FROM mysql.proc UNION SELECT CONCAT('SHOW CREATE TRIGGER `',trigger_schema,'`.`',trigger_name,'`\\G') SQLStatements FROM information_schema.triggers;
+-----------------------------------------------------+
| SQLStatements |
+-----------------------------------------------------+
| SHOW CREATE PROCEDURE `test`.`CreateSampleTable`\G |
| SHOW CREATE PROCEDURE `test`.`CreateSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`GetMissingIntegers`\G |
| SHOW CREATE FUNCTION `test`.`GetTestTableCounts`\G |
| SHOW CREATE PROCEDURE `test`.`ImportWeeklyBatch`\G |
| SHOW CREATE FUNCTION `test`.`InsertName`\G |
| SHOW CREATE PROCEDURE `test`.`LoadSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`MigrateColumn`\G |
| SHOW CREATE TRIGGER `test`.`AddPermTempKey`\G |
| SHOW CREATE TRIGGER `test`.`DeletePermTempKey`\G |
+-----------------------------------------------------+
10 rows in set (0.07 sec)
La deuxième façon est le meilleur moyen pour CBM, en utilisant mysqldump.
Cela va collecter toutes les structures de tables, SP, SF et triggers dans un seul fichier.
mysqldump -h... -u... -p... --no-data --routines --triggers --all-databases > MySQLSchema.sql
Cela fera la même chose, mais sans les trucs CREATE TABLE:
mysqldump -h... -u... -p... --no-data --no-create-info --routines --triggers --all-databases > MySQLSchema.sql
Donnez ces essayer !!!
Je voudrais savoir ça aussi !!! –
Ne sait pas si c'est ce dont vous avez besoin, mais vous pouvez utiliser la table ** information_schema.routines ** pour vider vos fonctions et procédures. – rMX
Vous pouvez utiliser mysql.proc et information_schema.triggers comme ma réponse le signale. – RolandoMySQLDBA