3.10 Liquibase設定のヒント
3.10.2 接続スキーマとは異なるスキーマでのデータベース・オブジェクトの作成
SQLcl Liquibaseを使用すると、接続しているデータベース・ユーザー・スキーマとは異なるデータベース・ユーザー・スキーマにデプロイメントできます。ただし、ターゲット・ユーザー・スキーマに必要な権限が必要です。
liquibase update
コマンドには、これに関連する3つの重要なパラメータがあります。
-output-default-schema|-ouds
データ定義言語(DDL) SQLを実行してデータベース・オブジェクトを作成または変更するときに、スキーマを出力するかどうかを制御します。
-
-output-default-schema true
が設定されている場合、スキーマが含まれます。create table storefront.merchandise …
-
-output-default-schema false
が設定されているか、-output-default-schema
がまったく設定されていない場合、スキーマは含まれません。create table merchandise …
データベース・オブジェクトを接続スキーマとは異なるスキーマにデプロイするには、
-output-default-schema true
を設定して、-default-schema-name
を使用してオブジェクトを作成するスキーマを指定できるようにする必要があります。-
-default-schema-name|-desn
-output-default-schema true
が設定されている場合、-desn
パラメータは出力されるスキーマを制御します。このパラメータを使用して、データベース・オブジェクトを作成するスキーマを指定します。たとえば、test_userに接続していて、表をstorefrontに作成する場合、コマンドは次のようになります。
liquibase update -changelog-file merchandise_table.xml -output-default-schema true -default-schema-name storefront
-output-default-schema true
が設定されていて、-default-schema-name
が設定されていない場合、スキーマ出力は変更ログ・ファイル内の変更セットのownerName
属性に基づきます。<n0:createSxmlObject objectName="Merchandise" objectType="TABLE" ownerName="LBUSER" replaceIfExists="false" >
ownerName
が設定されていない場合、接続先のスキーマが使用されます。-liquibase-schema-name|-lbsn
SQLclのLiquibase機能の大きな利点の1つは、変更を追跡および管理する機能です。これは主に、Liquibaseの実行時にスキーマで自動的に作成および更新される
databasechangelog
追跡表で行われます。-liquibase-schema-name
を使用すると、databasechangelog表を介してLiquibase追跡情報を更新するスキーマを制御できます。これにより、データベース・オブジェクト自体を他のスキーマに適用しながら、すべてのLiquibase変更情報を追跡する制御スキーマまたはユーザーを持つなどのユースケースを設定できます。
たとえば、ユーザーまたはスキーマstorefrontに接続し、merchandise_table.xml変更ログ・ファイルを使用して商品表を作成します。ただし、Liquibaseでは、このスキーマにdatabasechangelog表を作成しません。追跡情報を、スキーマcontrol_userの既存のdatabasechangelog表に格納します。
次のコマンドでこれを実行できます。
liquibase update -changelog-file merchandise_table.xml -liquibase-schema-name control_user
ノート:
Storefrontには、control_userのdatabasechangelog
、databasechangeloglock
およびdatabasechangelog_actions
表に対する書込み権限が必要です。GRANT SELECT, INSERT, UPDATE, DELETE ON CONTROL_USER.DATABASECHANGELOG TO STOREFRONT; GRANT SELECT, INSERT, UPDATE, DELETE ON CONTROL_USER.DATABASECHANGELOGLOCK TO STOREFRONT; GRANT SELECT, INSERT, UPDATE, DELETE ON CONTROL_USER.DATABASECHANGELOG_ACTIONS TO STOREFRONT;