I upgraded to version 26.2.0 from version 23.0.0, how can I migrate Database

Hi Guys,

I am new to keycloak and need help to migrate database for version 26.2.0 from 23.0.0.
I have take a new fork from Keycloak Github and do my old changes there mostly in themes folder then build the project using these commands

sudo ./mvnw -pl quarkus/deployment,quarkus/dist,themes, -am -DskipTests clean install

sudo ./mvnw -pl themes -am -DskipTests clean install

sudo java -jar quarkus/server/target/lib/quarkus-run.jar build \                  
 --db=mysql

Then run the project using this -

sudo java -jar --enable-preview quarkus/server/target/lib/quarkus-run.jar start \
  --db=mysql \
  --db-username=root \
  --db-password=root \
  --http-enabled=true \
  --hostname-strict=false \
  --db-url-host=127.0.0.1 \
  --db-url-database=keycloak

After that I got error for Table doesn’t exist
Then I created below Tables

'keycloak.server_config'
'keycloak.revoked_token'
'keycloak.jgroups_ping'

After that my application is running but when I tried to open the keycloak app http://0.0.0.0:8080/

then getting below error -

2025-05-08 13:06:18,082 WARN [org.keycloak.cookie.DefaultCookieProvider] (executor-thread-3) Non-secure context detected; cookies are not secured, and will not be available in cross-origin POST requests
2025-05-08 13:06:18,264 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (executor-thread-3) SQL Error: 1054, SQLState: 42S22
2025-05-08 13:06:18,264 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (executor-thread-3) Unknown column ‘ipe1_0.HIDE_ON_LOGIN’ in ‘field list’
2025-05-08 13:06:18,266 SEVERE [freemarker.runtime] (executor-thread-3) Error executing FreeMarker template: freemarker.core._TemplateModelException: An error has occurred when reading existing sub-variable “providers”; see cause exception! The type of the containing value was: extended_hash+string (org.keycloak.forms.login.freemarker.model.IdentityProviderBean wrapped into f.e.b.StringModel)

FTL stack trace (“~” means nesting-related):
- Failed at: #if realm.password && social?? && soc… [in template “login.ftl” at line 92, column 9]
~ Reached through: #nested “socialProviders” [in template “template.ftl” in macro “registrationLayout” at line 165, column 11]
~ Reached through: @layout.registrationLayout displayMes… [in template “login.ftl” at line 2, column 1]
at freemarker.ext.beans.BeanModel.get(BeanModel.java:185)
at freemarker.core.Dot._eval(Dot.java:43)
at freemarker.core.Expression.eval(Expression.java:101)
at freemarker.core.BuiltInsForExistenceHandling$ExistenceBuiltIn.evalMaybeNonexistentTarget(BuiltInsForExistenceHandling.java:52)
at freemarker.core.BuiltInsForExistenceHandling$has_contentBI._eval(BuiltInsForExistenceHandling.java:114)
at freemarker.core.BuiltInsForExistenceHandling$has_contentBI.evalToBoolean(BuiltInsForExistenceHandling.java:121)
at freemarker.core.AndExpression.evalToBoolean(AndExpression.java:36)
at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:48)
at freemarker.core.Environment.visit(Environment.java:335)
at freemarker.core.Environment.visit(Environment.java:377)
at freemarker.core.Environment.invokeNestedContent(Environment.java:621)
at freemarker.core.BodyInstruction.accept(BodyInstruction.java:60)
at freemarker.core.Environment.visit(Environment.java:371)
at freemarker.core.Environment.invokeMacroOrFunctionCommonPart(Environment.java:877)
at freemarker.core.Environment.invokeMacro(Environment.java:813)
at freemarker.core.UnifiedCall.accept(UnifiedCall.java:84)
at freemarker.core.Environment.visit(Environment.java:335)
at freemarker.core.Environment.visit(Environment.java:341)
at freemarker.core.Environment.process(Environment.java:314)
at freemarker.template.Template.process(Template.java:383)
at org.keycloak.theme.freemarker.DefaultFreeMarkerProvider.processTemplate(DefaultFreeMarkerProvider.java:49)
at org.keycloak.forms.login.freemarker.FreeMarkerLoginFormsProvider.processTemplate(FreeMarkerLoginFormsProvider.java:611)
at org.keycloak.forms.login.freemarker.FreeMarkerLoginFormsProvider.createResponse(FreeMarkerLoginFormsProvider.java:340)
at org.keycloak.forms.login.freemarker.FreeMarkerLoginFormsProvider.createLoginUsernamePassword(FreeMarkerLoginFormsProvider.java:625)
at org.keycloak.authentication.authenticators.browser.UsernamePasswordForm.challenge(UsernamePasswordForm.java:93)
at org.keycloak.authentication.authenticators.browser.UsernamePasswordForm.authenticate(UsernamePasswordForm.java:79)
at org.keycloak.authentication.DefaultAuthenticationFlow.processSingleFlowExecutionModel(DefaultAuthenticationFlow.java:465)
at org.keycloak.authentication.DefaultAuthenticationFlow.processFlow(DefaultAuthenticationFlow.java:269)
at org.keycloak.authentication.DefaultAuthenticationFlow.processSingleFlowExecutionModel(DefaultAuthenticationFlow.java:400)
at org.keycloak.authentication.DefaultAuthenticationFlow.processFlow(DefaultAuthenticationFlow.java:291)
at org.keycloak.authentication.AuthenticationProcessor.authenticateOnly(AuthenticationProcessor.java:1095)
at org.keycloak.protocol.AuthorizationEndpointBase.handleBrowserAuthenticationRequest(AuthorizationEndpointBase.java:115)
at org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.buildAuthorizationCodeAuthorizationResponse(AuthorizationEndpoint.java:392)
at org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.process(AuthorizationEndpoint.java:234)
at org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.buildGet(AuthorizationEndpoint.java:118)
at org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint$quarkusrestinvoker$buildGet_4b690b27439f19dd29733dc5fd4004f24de0adb6.invoke(Unknown Source)
at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:141)
at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
at io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:638)
at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2675)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2654)
at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1627)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1594)
at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:1623)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:119)
at java.base/java.lang.reflect.Method.invoke(Method.java:578)
at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1553)
at freemarker.ext.beans.BeanModel.invokeThroughDescriptor(BeanModel.java:233)
at freemarker.ext.beans.BeanModel.get(BeanModel.java:152)
… 47 more
Caused by: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [/* */ select ipe1_0.INTERNAL_ID,ipe1_0.ADD_TOKEN_ROLE,ipe1_0.PROVIDER_ALIAS,ipe1_0.AUTHENTICATE_BY_DEFAULT,ipe1_0.PROVIDER_DISPLAY_NAME,ipe1_0.ENABLED,ipe1_0.FIRST_BROKER_LOGIN_FLOW_ID,ipe1_0.HIDE_ON_LOGIN,ipe1_0.LINK_ONLY,ipe1_0.ORGANIZATION_ID,ipe1_0.POST_BROKER_LOGIN_FLOW_ID,ipe1_0.PROVIDER_ID,ipe1_0.REALM_ID,ipe1_0.STORE_TOKEN,ipe1_0.TRUST_EMAIL from IDENTITY_PROVIDER ipe1_0 where ipe1_0.REALM_ID=? and ipe1_0.ENABLED and not(ipe1_0.LINK_ONLY) and not(ipe1_0.HIDE_ON_LOGIN) and ipe1_0.ORGANIZATION_ID is null order by ipe1_0.PROVIDER_ALIAS] [Unknown column ‘ipe1_0.HIDE_ON_LOGIN’ in ‘field list’] [n/a]