<div dir="ltr"><div>Hello Peter,</div><div><br></div><div>if you&#39;re already on 2.0.0 then you could do the following. ..</div><div>Download the latest keycloak-2.1.0.Final relase and extract it.</div><div><br></div><div>Then just run the liquibase scripts within the keycloak-model-jpa-2.1.0.Final.jar from the classpath as shown below.</div><div>This works because since version 1.9.1.Final until now (2.2.0..) the liquibase scripts </div><div>only contain declarative changes (that have no deps on Keycloak classes), however </div><div>earlier versions run custom migration code that requires a bunch of Keycloak application classes on the classpath.</div><div><br></div><div>So this approach (currently) works but will require additional classpath / infrastructure changes </div><div>once keycloak needs to perform some programmatic migration operations in future releases.</div><div><br></div><div>In my test I used a database with very little data so I&#39;d recommend that you try this </div><div>on a database backup first :-)</div><div><br></div><div>The following example is based on a database created by Keycloak version 1.9.1.Final that</div><div>I want to upgrade to 2.1.0.Final.</div><div><br></div><div>My current directory:</div><div>tom@euler ~/dev/playgroud/keycloak/keycloak-2.1.0.Final</div><div><br></div><div># Configure PG JDBC Driver jar</div><div>POSTGRES_JDBC_LIB=~/.m2/repository/org/postgresql/postgresql/9.4.1209.jre7/postgresql-9.4.1209.jre7.jar</div><div># Keycloak Deps</div><div>KEYCLOAK_DEPS_LIB=modules/system/layers/base/org/jboss/logging/main/jboss-logging-3.3.0.Final.jar</div><div># Keycloak JPA Model jar contains the liquibase migration scripts</div><div>KEYCLOAK_JPA_MODEL_LIB=modules/system/layers/keycloak/org/keycloak/keycloak-model-jpa/main/keycloak-model-jpa-2.1.0.Final.jar</div><div><br></div><div># Manually execute the database update</div><div>java -jar modules/system/layers/keycloak/org/liquibase/main/liquibase-core-3.4.1.jar \</div><div>     --driver=org.postgresql.Driver \</div><div>     --classpath=&quot;$POSTGRES_JDBC_LIB:$KEYCLOAK_DEPS_LIB:$KEYCLOAK_JPA_MODEL_LIB&quot; \</div><div>     --changeLogFile=META-INF/jpa-changelog-master.xml \</div><div>     --url=&quot;jdbc:postgresql://localhost:5432/keycloak_migration_test&quot; \</div><div>     --username=keycloak \</div><div>     --password=keycloak \</div><div>     --logLevel=debug \</div><div>     update</div><div><br></div><div>The migration logs were actually quite big so I pasted them here for reference:</div><div><a href="https://gist.github.com/thomasdarimont/4d24215681b395361abd6736fa8ce36c">https://gist.github.com/thomasdarimont/4d24215681b395361abd6736fa8ce36c</a></div><div><br></div><div>And yes, I could successfully start Keycloak 2.1.0 on the migrated database.</div><div><br></div><div><div>With that said, I agree with you that it would be a good idea to provide a script that only performs the database </div><div>migration to ease testing of new releases.</div></div><div><br></div><div><br></div><div>Cheers,</div><div>Thomas</div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-08-18 20:54 GMT+02:00 Nalyvayko, Peter <span dir="ltr">&lt;<a href="mailto:pnalyvayko@agi.com" target="_blank">pnalyvayko@agi.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Tom, thanks for the link. My use case: the dev team uses keycloak final 2.0.0 release distribution in their development environment.<br>
To start keycloak they run &#39;standalone.bat&#39; as a part of their dev test bootstrap (not &#39;mvn -f ...-Pkeycloak-server) . Sometimes there is a need to run the keycloak database init/upgrade without actually starting the keycloak server,  so it would be great to be able to achieve that by specifying, for example, an extra parameter to&#39;standalone.bat&#39;, i.e:<br>
<br>
$ standalone.bat --init-database-only<br>
<br>
The above command would execute the database initialization/upgrade and immediately terminate. Does it make sense?<br>
<br>
The instructions in the link, I believe, were written for a slightly different use case.<br>
<br>
______________________________<wbr>__________<br>
From: Thomas Darimont [<a href="mailto:thomas.darimont@googlemail.com">thomas.darimont@googlemail.<wbr>com</a>]<br>
Sent: Thursday, August 18, 2016 2:15 PM<br>
To: Nalyvayko, Peter<br>
Cc: keycloak-user<br>
Subject: Re: [keycloak-user] Database upgrade<br>
<span class=""><br>
Hello Peter,<br>
<br>
<a href="https://github.com/keycloak/keycloak/blob/master/misc/UpdatingDatabaseSchema.md" rel="noreferrer" target="_blank">https://github.com/keycloak/<wbr>keycloak/blob/master/misc/<wbr>UpdatingDatabaseSchema.md</a><br>
<br>
Cheers,<br>
Thomas<br>
<br>
</span>2016-08-18 19:21 GMT+02:00 Nalyvayko, Peter &lt;<a href="mailto:pnalyvayko@agi.com">pnalyvayko@agi.com</a>&lt;mailto:<a href="mailto:pnalyvayko@agi.com">pna<wbr>lyvayko@agi.com</a>&gt;&gt;:<br>
<span class="">Hi,<br>
Is there an existing way to execute the keycloak database upgrade without actually starting the keycloak server?<br>
Thanks!<br>
--Peter<br>
______________________________<wbr>_________________<br>
keycloak-user mailing list<br>
</span><a href="mailto:keycloak-user@lists.jboss.org">keycloak-user@lists.jboss.org</a>&lt;<wbr>mailto:<a href="mailto:keycloak-user@lists.jboss.org">keycloak-user@lists.<wbr>jboss.org</a>&gt;<br>
<a href="https://lists.jboss.org/mailman/listinfo/keycloak-user" rel="noreferrer" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/keycloak-user</a><br>
<br>
</blockquote></div><br></div>