I have the same issue even without preconditions defined. When upgrading
from version 3.2.2 to 3.3.2, Liquibase suddenly runs a "SHOW FULL
COLUMNS..." query for every table in the database.
To verify the difference, I created a database (MySQL) with 3 tables and ran liquibase with "updateSQL" on both versions. Below is the output of the general query log for each run.
With Liquibase 3.2.2:
To verify the difference, I created a database (MySQL) with 3 tables and ran liquibase with "updateSQL" on both versions. Below is the output of the general query log for each run.
With Liquibase 3.2.2:
- Connect
root@localhost on test
Query SHOW SESSION VARIABLES
Query SHOW COLLATION
Query SET character_set_results = NULL
Query SET autocommit=1
Query SET sql_mode='STRICT_TRANS_TABLES'
Query SELECT USER()
Query SET autocommit=0
Query SELECT USER()
Query rollback
Query SHOW FULL TABLES FROM `test` LIKE 'databasechangeloglock'
Query select count(*) from test.DATABASECHANGELOGLOCK
Query commit
Query rollback
Query SHOW FULL TABLES FROM `test` LIKE 'databasechangelog'
Query SHOW FULL TABLES FROM `test` LIKE 'databasechangelog'
Query SHOW FULL COLUMNS FROM `databasechangelog` FROM `test` LIKE '%'
Query SELECT MD5SUM FROM test.DATABASECHANGELOG WHERE MD5SUM IS NOT NULL
Query SHOW FULL TABLES FROM `test` LIKE 'databasechangelog'
Query SELECT FILENAME,AUTHOR,ID,MD5SUM,DATEEXECUTED,ORDEREXECUTED,EXECTYPE,DESCRIPTION,COMMENTS,TAG,LIQUIBASE FROM test.DATABASECHANGELOG ORDER BY DATEEXECUTED ASC, ORDEREXECUTED ASC
Query commit
Query SHOW FULL TABLES FROM `test` LIKE 'databasechangeloglock'
Query select count(*) from test.DATABASECHANGELOGLOCK
Query rollback
Query SHOW FULL TABLES FROM `test` LIKE 'databasechangeloglock'
Query rollback
Query commit
Query rollback
Query SHOW FULL TABLES FROM `test` LIKE 'databasechangeloglock'
Query rollback
Query commit
Query rollback
Query rollback
Query SET autocommit=1
Quit
Liquibase 3.3.2:
- Connect
root@localhost on test
Query SHOW SESSION VARIABLES
Query SHOW COLLATION
Query SET character_set_results = NULL
Query SET autocommit=1
Query SET sql_mode='STRICT_TRANS_TABLES'
Query SELECT USER()
Query SET autocommit=0
Query SELECT USER()
Query rollback
Query SHOW FULL TABLES FROM `test` LIKE 'databasechangeloglock'
Query select count(*) from test.DATABASECHANGELOGLOCK
Query commit
Query rollback
Query SHOW FULL TABLES FROM `test` LIKE 'databasechangelog'
Query SHOW FULL TABLES FROM `test` LIKE '%'
Query SHOW FULL COLUMNS FROM `databasechangelog` FROM `test` LIKE '%'
Query SHOW FULL COLUMNS FROM `databasechangeloglock` FROM `test` LIKE '%'
Query SHOW FULL COLUMNS FROM `table1` FROM `test` LIKE '%'
Query SHOW FULL COLUMNS FROM `table2` FROM `test` LIKE '%'
Query SHOW FULL COLUMNS FROM `table3` FROM `test` LIKE '%'
Query SELECT MD5SUM FROM test.DATABASECHANGELOG WHERE MD5SUM IS NOT NULL
Query SHOW FULL TABLES FROM `test` LIKE 'databasechangelog'
Query SELECT FILENAME,AUTHOR,ID,MD5SUM,DATEEXECUTED,ORDEREXECUTED,EXECTYPE,DESCRIPTION,COMMENTS,TAG,LIQUIBASE FROM test.DATABASECHANGELOG ORDER BY DATEEXECUTED ASC, ORDEREXECUTED ASC
Query commit
Query rollback
Query rollback
Query commit
Query rollback
Query rollback
Query SET autocommit=1
Quit
As you see, in the latter example it runs queries like "SHOW
FULL COLUMNS FROM `table1` FROM `test` LIKE '%'" for each
of the tables in the database. And in rainer.spruenkens case, this
will lead to the execution of 26.000 queries...