やりたいこと
Keycloak(RedHat Build of Keycloak)で新しいバージョン起動時に行われるデータベースへの変更を事前に確認する。
環境情報
- Red Hat Enterprise Linux 9.3
- rhbk-26.0.11
やり方
kc.shにてデータベース移行に使用するオプションであるspi-connections-jpa-quarkus-migration-strategy
を利用し、データベースの手動移行を意味するmanual
を付与して実行する。
$ ./bin/kc.sh start --spi-connections-jpa-quarkus-migration-strategy=manual
実行後はカレンとディレクトリにSQLが記録されたファイルが出力されている。
-rw-r--r-- 1 ... keycloak-database-update.sql
以下、補足です。
補足
製品ログには以下のように出力されてエラー扱いですが、正常にファイルは出力されています。
[org.key.qua.run.cli.ExecutionExceptionHandler] (main) ERROR: Failed to start server in (production) mode [org.key.qua.run.cli.ExecutionExceptionHandler] (main) ERROR: Database not up-to-date, please migrate database with /xx/rhbk-26.0.11/keycloak-database-update.sql
尚、SQLファイルの冒頭は以下のようになっています。
$ head keycloak-database-update.sql -- ********************************************************************* -- Update Database Script -- ********************************************************************* -- Change Log: META-INF/jpa-changelog-master.xml -- Ran at: ... -- Against: postgres@jdbc:postgresql://xx/keycloak -- Liquibase version: [local build] -- ********************************************************************* -- Changeset META-INF/jpa-changelog-18.0.15.xml::18.0.15-30992-index-consent::keycloak CREATE INDEX IDX_USCONSENT_SCOPE_ID ON public.USER_CONSENT_CLIENT_SCOPE(SCOPE_ID); INSERT INTO public.databasechangelog (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('18.0.15-xx-index-consent', 'keycloak', 'META-INF/jpa-changelog-18.0.15.xml', NOW(), 125, '9:xx', 'createIndex indexName=IDX_USCONSENT_SCOPE_ID, tableName=USER_CONSENT_CLIENT_SCOPE', '', 'EXECUTED', NULL, NULL, 'DEV', '6619371687'); ...
同オプションを付けない場合は製品ログには以下のように出力され、データベースの更新が自動的に行われます。
INFO [org.keycloak.quarkus.runtime.storage.database.liquibase.QuarkusJpaUpdaterProvider] (main) Updating database. Using changelog META-INF/jpa-changelog-master.xml ... INFO [org.keycloak.storage.datastore.DefaultMigrationManager] (main) Migrating older model to 25.0.0 INFO [org.keycloak.storage.datastore.DefaultMigrationManager] (main) Migrating older model to 26.0.0 ... INFO [io.quarkus] (main) Profile prod activated.
以上、ご参考になれば幸いです。