概要
TDVに追加したデータソースをデータサービスとして公開(パブリッシュ)し、そのデータサービスに対してINSERTやCREATE TABLEなどのクエリを実行することで、データソースに変更を加えることができます。
本記事では、以下の5種類のクエリをTDV公開データサービスに対して実行し、どのような結果となるかをステップバイステップで説明します。
検証環境
PostgreSQL(外部データソース)
外部データソース用のPostgreSQLインスタンス(5432ポート)です。
TDV ServerにバンドルされているリポジトリDB(9408ポート)やデフォルトキャッシュデータベース(9404ポート)とは異なります。
TDVに追加するデータソースとして、PostgreSQLインスタンス内に作成済みの「契約管理データベース」を使用します。
「契約管理データベース」は「契約管理スキーマ」を持ち、そのスキーマ内に「契約テーブル」が存在します。
「契約テーブル」には10件のレコードが存在しています。(以下はDBeaverで接続しプレビューしたものです。)
CREATE TABLEでは、「契約管理スキーマ」内に新しいテーブルを作成しますので、TDV ServerからPostgreSQLデータソースへの接続に利用するユーザー(tdv)には各種クエリ(INSERT, UPDATE, …)を実行するために必要な権限がPostgreSQL側で事前に付与されています。
TDV Server
TDV Serverは、PostgreSQL(外部データソース)と同一サーバー上で実行されています。
データソース
PostgreSQL(外部データソース)の「契約管理データベース」がデータソースとして追加されており、
「契約管理スキーマ」とその配下の「契約テーブル」がイントロスペクトされ、メタデータが追加されています。
公開データサービス
コンポジットデータサービス「契約管理データベース」>「契約管理スキーマ」>「契約テーブル」がデータサービス(データベース方式)として公開されています。
コンポジットデータサービス「契約管理データベース」には、コンテナのマッピング設定を事前に行います。
ここでは、コンポジットデータサービス「契約管理データベース」直下の「契約管理スキーマ」とデータソース「契約管理データベース」直下の「契約管理スキーマ」の対応付けを行います。
これにより、公開テーブル「契約管理データベース」>「契約管理スキーマ」>「契約テーブル」に対して外部のクライアントアプリなどからDDLクエリが実行された場合には、対応するスキーマ、すなわちデータソース「契約管理データベース」>「契約管理スキーマ」に対してそのDDLがわたされ、結果として、データソース「契約管理データベース」の先にある物理データソース(PostgreSQL)に対してそのDDLが実行されることになります。
INSERT
DBeaverからTDV公開テーブルに対して、以下のINSERTクエリを実行します。
INSERT INTO 契約管理スキーマ.契約テーブル(
"契約ID",
契約名,
金額,
取引先名,
契約開始日,
契約終了日
)
VALUES(
11,
'サーバー構築',
80000,
'BCDシステムズ',
'2024-01-01',
'2024-03-31'
)
続いて、TDV公開テーブルに対して、以下のSELECTクエリを実行し、 レコードが1件追加されたことを確認します。
SELECT * FROM 契約管理スキーマ.契約テーブル
TDV Studio上でも同様に確認します。
最後に、物理データソース(PostgreSQL)のテーブルも直接参照して確認します。
このように、TDVの公開データサービスにINSERTクエリを実行することで、その先の物理データソースに対してINSERTを実行することができます。
UPDATE
DBeaverからTDV公開テーブルに対して、以下のUPDATEクエリを実行します。
UPDATE
契約管理スキーマ.契約テーブル
SET
金額 = 70000,
契約終了日 = NULL
WHERE
"契約ID" = 8
続いて、TDV公開テーブルに対して、以下のSELECTクエリを実行し、 契約ID = 8のレコードが更新されたことを確認します。
SELECT * FROM 契約管理スキーマ.契約テーブル
TDV Studio上でも同様に確認します。
最後に、物理データソース(PostgreSQL)のテーブルも直接参照して確認します。
このように、TDVの公開データサービスにUPDATEクエリを実行することで、その先の物理データソースに対してUPDATEを実行することができます。
DELETE
DBeaverからTDV公開テーブルに対して、以下のDELETEクエリを実行します。
DELETE
FROM
契約管理スキーマ.契約テーブル
WHERE
"契約ID" = 3
続いて、TDV公開テーブルに対して、以下のSELECTクエリを実行し、 契約ID = 3のレコードが削除されたことを確認します。
SELECT * FROM 契約管理スキーマ.契約テーブル
TDV Studio上でも同様に確認します。
最後に、物理データソース(PostgreSQL)のテーブルも直接参照して確認します。
このように、TDVの公開データサービスにDELETEクエリを実行することで、その先の物理データソースに対してDELETEを実行することができます。
CREATE TABLE
DBeaverからTDV公開テーブルに対して、以下のCREATE TABLEクエリを実行します。
CREATE TABLE 契約管理スキーマ.顧客テーブル(
"顧客ID" INT PRIMARY KEY,
"顧客名" VARCHAR(100),
"住所" VARCHAR(255),
"電話番号" VARCHAR(20),
"メールアドレス" VARCHAR(100),
"登録日" DATE
)
続いて、TDV公開テーブルに対して、以下のSELECTクエリを実行し、顧客テーブルが作成されたことを確認します。
SELECT * FROM 契約管理スキーマ.顧客テーブル
TDV Studio上でも同様に確認します。
最後に、物理データソース(PostgreSQL)のテーブルも直接参照して確認します。
このように、TDVの公開データサービスにCREATE TABLEクエリを実行することで、その先の物理データソースに対してCREATE TABLEを実行することができます。
DROP TABLE
DBeaverからTDV公開テーブルに対して、以下のDROP TABLEクエリを実行します。
DROP TABLE 契約管理スキーマ.契約テーブル
続いて、TDV公開テーブルに対して、以下のSELECTクエリを実行し、契約テーブルが削除されたことを確認します。
SELECT * FROM 契約管理スキーマ.契約テーブル
TDV Studio上でも同様に確認します。
最後に、物理データソース(PostgreSQL)のテーブルも直接参照して確認します。
このように、TDVの公開データサービスにDROP TABLEクエリを実行することで、その先の物理データソースに対してDROP TABLEを実行することができます。