Postgre SQLを利用したデータベーススキーマのセットアップ

記事概要

この記事では、Postgres SQL を使用して Corda のデータベーススキーマを設定する方法を説明します。これは、Corda でデータベーススキーマがどのように管理されているかについての参考ページであり、チュートリアルではありません。 DB管理をより深く知るためには、以下の公式ドキュメントを参照してください。

 

①Nodeデータベース

https://docs.corda.net/docs/corda-enterprise/4.3/node-database.html#node-database

②データベーススキーマのセットアップ

https://docs.corda.net/docs/corda-enterprise/4.3/node-database-admin.html#database-schema-setup

③開発環境のためのデータベーススキーマのセットアップ

https://docs.corda.net/docs/corda-enterprise/4.3/node-database-developer.html

④ノードへのCordappのデプロイ方法

https://docs.corda.net/docs/corda-enterprise/4.3/node-operations-cordapp-deployment.html

 

この記事はSQLデータベースとSQLクエリの基本的な理解があることを前提としています。もしその様な知識に不安がある場合は、下記に紹介する様なオンラインの関連ドキュメントをまず参照することをお勧めします。

関連サイト(日本語)

https://www.techscore.com/tech/sql/index.html/

https://db-study.com/archives/category/sql%E5%85%A5%E9%96%80

 

前提

①Corda Enterprise 4.3.1 or 4,2

②Database Management Tool 4.3.1 or 4.2 (included in Corda Enterprise)

③PostgresSQL 9.6 (DBクライアントは、Postgres SQLをサポートしている任意のクライアントアプリケーションを使用することができます。)

 

 

ユーザーの作成

まず、データベースにユーザーを作成する必要があります。2人のユーザーを作成します。1人は管理者権限を持ち、もう1人は制限付きの権限を持ちます。制限された権限を持つユーザーは Corda Nodeで使用されます。

【今回使用するユーザーネーム】

管理者権限を持つユーザ - my_admin_user
制限された権限を持つユーザ - my_user

 

以下のクエリは、

https://docs.corda.net/docs/corda-enterprise/4.3/node-database-admin.html#postgresql

からコピーできます。

 

CREATE SCHEMA "my_schema";
GRANT USAGE, CREATE ON SCHEMA "my_schema" TO "my_admin_user";
ALTER DEFAULT privileges IN SCHEMA "my_schema" GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON tables TO "my_admin_user";
ALTER DEFAULT privileges IN SCHEMA "my_schema" GRANT USAGE, SELECT ON sequences TO "my_admin_user";
ALTER ROLE "my_admin_user" SET search_path = "my_schema",public;

GRANT USAGE ON SCHEMA "my_schema" TO "my_user";
ALTER ROLE "my_user" SET search_path = "my_schema";

 

 

Liquibase管理テーブルの作成

ユーザーとスキーマを作成したら、Liquibaseで使用する管理テーブルを作成する準備は完了です。

Cordaでは、データベースの移行管理にLiquibaseを使用しています。

以下のクエリは、

https://docs.corda.net/docs/corda-enterprise/4.3/node-database-admin.html#postgresql-1

からコピーしたものです。

CREATE TABLE "my_schema".databasechangelog (
id varchar(255) NOT NULL,
author varchar(255) NOT NULL,
filename varchar(255) NOT NULL,
dateexecuted timestamp NOT NULL,
orderexecuted int4 NOT NULL,
exectype varchar(10) NOT NULL,
md5sum varchar(35) NULL,
description varchar(255) NULL,
comments varchar(255) NULL,
tag varchar(255) NULL,
liquibase varchar(20) NULL,
contexts varchar(255) NULL,
labels varchar(255) NULL,
deployment_id varchar(10) NULL);

CREATE TABLE "my_schema".databasechangeloglock (
id int4 NOT NULL,
locked bool NOT NULL,
lockgranted timestamp NULL,
lockedby varchar(255) NULL,
CONSTRAINT pk_databasechangeloglock PRIMARY KEY (id));

REVOKE INSERT, UPDATE, DELETE ON TABLE "my_schema".databasechangelog FROM my_user;

 

 

データベース管理ツールに必要なノードの構成

Corda Enterpriseに付属しているDatabase Management Toolを使用して、移行スクリプトの抽出と適用を行います。その前に、node.conf(Node構成ファイル)に以下の設定を追加する必要があります。

以下では、

https://docs.corda.net/docs/corda-enterprise/4.3/node-database-admin.html#postgresql-2

からコピーして少し修正を加えています。

 

dataSourceProperties = {
    dataSourceClassName = "org.postgresql.ds.PGSimpleDataSource"
    dataSource.url = "jdbc:postgresql://<host>:<port>/<database>"
    dataSource.user = my_user
    dataSource.password = "my_password"
}

database = {
    transactionIsolationLevel = READ_COMMITTED
    schema = my_schema
    runMigration = false
}

 

プレースホルダを適切な値に置き換える必要があります。例えば、データベースサーバがローカルにポート5432で設定されていて、"partyA "という名前のデータベースを持っている場合、設定はこのようになります。
dataSourceProperties = {
    dataSourceClassName = "org.postgresql.ds.PGSimpleDataSource"
    dataSource.url = "jdbc:postgresql://localhost:5432/partyA"
    dataSource.user = my_user
    dataSource.password = "my_password"
}

database = {
    transactionIsolationLevel = READ_COMMITTED
    schema = my_schema
runMigration = false
}
※runMigrationはデフォルト値がfalseなので、記述が必須ではありません。重要な設定プロパティのため、記載しています。

データベース管理ツールを使用した移行スクリプトの抽出と適用

まずは下記①②を確認してください。

 

①データベース管理ツールのjarファイル( tools-database-manager-<リリースバージョン>.jar )がノードのルートの下に配置されていることを確認してください。

 

②JDBCドライバは、ノードのルートディレクトリの下のドライバディレクトリに配置されていることを確認してください。

 

※Postgres SQL用のJDBCドライバは下記からダウンロードできます: https://jdbc.postgresql.org/download.html

 

 

Corda用のDDLスクリプトを抽出

 dry-runコマンドでツールを実行します。
java -jar tools-database-manager-4.3-RC02.jar dry-run -b ./
正常に実行されると、このような出力が表示されるはずです。
12:15 $ java -jar tools-database-manager-4.3-RC02.jar dry-run -b ./
Exporting the current database migrations ...
Successfully exported to migration20200416121547.sql

Cordapps用のDDLスクリプトの抽出 (オプション)

ノードにインストールされた CorDapp は、カスタムデータベーステーブルにデータを保存する必要があるかもしれません。その場合は、移行スクリプトファイルが jar ファイルに含まれているはずです。
以下のコマンドを実行することで確認できます。
jar -tf <cordapp.jar> | grep -E 'migration.*\.(xml|yml|sql)'
必要な場合はデータベース管理ツールのcreate-migration-sql-for-cordappサブコマンドを使用することで、移行スクリプトを抽出することができます。
java -jar tools-database-manager-4.3-RC02.jar create-migration-sql-for-cordapp -b ./

移行スクリプトの適用 

これで、マイグレーションスクリプト(DDL)を適用する準備が整いました。次にexecute-migrationサブコマンドを使用します。

java -jar tools-database-manager-4.3-RC02.jar execute-migration -b ./
成功した場合、以下のような出力が表示されるはずです。
Running the database migration on .
Changesets to run: 121 (migration/node-metering.changelog-v1.xml::metering_data_table::R3.Corda, migration/node-metering.changelog-v1.xml::cordapp_metadata_table::R3.Corda, migration/common.changelog-init.xml::1511451595465-1.3::R3.Corda, ...)
Migration completed successfully
これでノードを起動する準備がすべて整いました。下記のコマンドで起動します。
java -jar corda.jar
ノードが起動すると、データベース内にCordaによって作成されたテーブルが表示されるはずです。
Screen_Shot_2020-04-20_at_12.06.50.png
(Last update 2021/3/1)
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています