From d3422bd19af6bdf0b4bd5fc6fe1e15029e91025b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Eeden?= Date: Wed, 3 Aug 2016 10:19:27 +0200 Subject: [PATCH] Give more info about foreign keys This helps when the table itself doesn't have foreign keys defined but if there are other tables with foreign keys pointing to the table on which gh-ost runs. This gives INFO messages for each FK. Note that it now informs the user about `payment` being involved. ``` $ ./gh-ost -database sakila -table rental -alter 'ADD COLUMN ghost_test_001 tinyint DEFAULT NULL' -port 19590 -user msandbox -password msandbox -verbose 2016-08-03 10:18:45 INFO starting gh-ost 1.0.8 2016-08-03 10:18:45 INFO Migrating `sakila`.`rental` 2016-08-03 10:18:45 INFO connection validated on 127.0.0.1:19590 2016-08-03 10:18:45 INFO User has ALL privileges 2016-08-03 10:18:45 INFO binary logs validated on 127.0.0.1:19590 2016-08-03 10:18:45 INFO Restarting replication on 127.0.0.1:19590 to make sure binlog settings apply to replication thread 2016-08-03 10:18:46 INFO Table found. Engine=InnoDB 2016-08-03 10:18:47 INFO Found foreign key on `sakila`.`payment` related to `sakila`.`rental` 2016-08-03 10:18:47 INFO Found foreign key on `sakila`.`rental` related to `sakila`.`rental` 2016-08-03 10:18:47 INFO Found foreign key on `sakila`.`rental` related to `sakila`.`rental` 2016-08-03 10:18:47 INFO Found foreign key on `sakila`.`rental` related to `sakila`.`rental` 2016-08-03 10:18:47 ERROR Found 4 foreign keys related to `sakila`.`rental`. Foreign keys are not supported. Bailing out 2016-08-03 10:18:47 FATAL 2016-08-03 10:18:47 ERROR Found 4 foreign keys related to `sakila`.`rental`. Foreign keys are not supported. Bailing out ``` Related Issue: https://github.com/github/gh-ost/issues/129 --- go/logic/inspect.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/go/logic/inspect.go b/go/logic/inspect.go index 98b5829..7b4fc88 100644 --- a/go/logic/inspect.go +++ b/go/logic/inspect.go @@ -312,7 +312,7 @@ func (this *Inspector) validateTable() error { // validateTableForeignKeys makes sure no foreign keys exist on the migrated table func (this *Inspector) validateTableForeignKeys() error { query := ` - SELECT COUNT(*) AS num_foreign_keys + SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME IS NOT NULL @@ -322,8 +322,10 @@ func (this *Inspector) validateTableForeignKeys() error { ` numForeignKeys := 0 err := sqlutils.QueryRowsMap(this.db, query, func(rowMap sqlutils.RowMap) error { - numForeignKeys = rowMap.GetInt("num_foreign_keys") - + fkSchema := rowMap.GetString("TABLE_SCHEMA") + fkTable := rowMap.GetString("TABLE_NAME") + log.Infof("Found foreign key on %s.%s related to %s.%s", sql.EscapeName(fkSchema), sql.EscapeName(fkTable), sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName)) + numForeignKeys++ return nil }, this.migrationContext.DatabaseName, @@ -335,7 +337,7 @@ func (this *Inspector) validateTableForeignKeys() error { return err } if numForeignKeys > 0 { - return log.Errorf("Found %d foreign keys on %s.%s. Foreign keys are not supported. Bailing out", numForeignKeys, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName)) + return log.Errorf("Found %d foreign keys related to %s.%s. Foreign keys are not supported. Bailing out", numForeignKeys, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName)) } log.Debugf("Validated no foreign keys exist on table") return nil