概要
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を実行することができます。