(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Keycloak/RHBK】spi-connections-jpa-quarkus-migration-strategyオプションを利用してSQLを出力する

スポンサーリンク

やりたいこと

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.

以上、ご参考になれば幸いです。