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
This commit is contained in:
parent
1c1869d876
commit
d3422bd19a
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user