-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Description
Before reporting an issue
- I have read and understood the above terms for submitting issues, and I understand that my issue may be closed without action if I do not follow them.
Area
core
Describe the bug
When migrating Keycloak from 24.0.x to 25.0.0 running on database MySQL 8 or MariaDB 10.2 the migration unique-consentuser fails due to
liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset META-INF/jpa-changelog-25.0.0.xml::unique-consentuser::keycloak: keycloak-1 | Reason: liquibase.exception.DatabaseException: (conn=2816) Table 'USER_CONSENT' is specified twice, both as a target for 'DELETE' and as a separate source for data [Failed SQL: (1093) DELETE FROM keycloak.USER_CONSENT WHERE ID IN ( SELECT uc.ID FROM keycloak.USER_CONSENT uc INNER JOIN ( SELECT CLIENT_ID, USER_ID, MAX(LAST_UPDATED_DATE) AS MAX_UPDATED_DATE FROM keycloak.USER_CONSENT GROUP BY CLIENT_ID, USER_ID HAVING COUNT(*) > 1 ) max_dates ON uc.CLIENT_ID = max_dates.CLIENT_ID AND uc.USER_ID = max_dates.USER_ID AND uc.LAST_UPDATED_DATE = max_dates.MAX_UPDATED_DATE )]
The SQL is not ok for MySQL/MariaDB
DELETE FROM keycloak.USER_CONSENT WHERE ID IN ( SELECT uc.ID FROM keycloak.USER_CONSENT uc INNER JOIN ( SELECT CLIENT_ID, USER_ID, MAX(LAST_UPDATED_DATE) AS MAX_UPDATED_DATE FROM keycloak.USER_CONSENT GROUP BY CLIENT_ID, USER_ID HAVING COUNT(*) > 1 ) max_dates ON uc.CLIENT_ID = max_dates.CLIENT_ID AND uc.USER_ID = max_dates.USER_ID AND uc.LAST_UPDATED_DATE = max_dates.MAX_UPDATED_DATE )
since not allowed as per https://mariadb.com/kb/en/e1093/
Version
25.0.0
Regression
- The issue is a regression
Expected behavior
Upgrade to 25.0.0 being completed successfully
Actual behavior
Upgrade to 25.0.0 fails
How to Reproduce?
Just start a Keycloak 24.x.x running on MySQL/MariaDB db and upgrade to Keycloak 25.0.0
Anything else?
No response