概要
Tsurugi 1.11.0 では、SQL関連の機能追加として相関サブクエリーに対応しました。
相関サブクエリーは、外側のクエリーのカラムを参照するサブクエリーです。
本バージョンでは、Tsurugi 1.10.0 で対応したスカラーサブクエリー機能を拡張し、相関サブクエリーを記述できるようになりました。
これにより、外側のクエリーの行ごとに異なる結果を返す動的なサブクエリーの記述が可能となり、高度な条件判定やデータ抽出を効率的に実行できるようになります。
また、Tsurugi 1.11.0 では BLOB型, CLOB型 に正式に対応しました。
BLOB型, CLOB型 は Tsurugi 1.3.0 から試験的機能として提供してきましたが、Tsurugiサーバーと同じ環境に配置したクライアントからのみ利用可能であることや、対応するクライアントライブラリが限られていることなど、利用には大きな制約がありました。
本バージョンでは、こうした環境上の制約を撤廃するとともに、対応クライアントライブラリも拡充し、BLOB型, CLOB型をより幅広いユースケースで利用できるようにしました。
さらに、Tsurugi 1.11.0 では、Tsurugi UDF において NULL 値のサポートをはじめとする機能追加と改善を行いました。
加えて、Ubuntu 26.04 への試験的サポートも追加しています。
その他、本バージョンではいくつかの重要な不具合修正や安定性の向上を行っています。
前バージョンを利用するすべてのユーザーは本バージョンへのアップグレードを強く推奨します。
機能追加と改善
機能追加と改善 - SQL
- 相関サブクエリーに対応
- 相関サブクエリーは、外側のクエリーのカラムを参照するサブクエリーです。これにより、外側のクエリーの各行に応じて異なる結果を返すサブクエリーを記述できるようになります。
- 以下は相関サブクエリーの例です:
SELECT * FROM t1 WHERE EXISTS ( SELECT * FROM t2 WHERE t1.k = t2.k -- 外側の t1.k を参照 );
- Tsurugi 1.11.0 での相関サブクエリーには、以下のような制限があります:
- 相関サブクエリー内では、あらゆるスカラーサブクエリー,
EXISTS述語, およびINサブクエリーを利用できない - 相関サブクエリー内では、
FULL OUTER JOINを利用できない - 相関サブクエリー内では、
VALUESはちょうど1行しか利用できない EXISTSを用いる相関サブクエリーは、トップレベルのフィルター条件のみで利用できる (WHEREやHAVINGの直下、またはそれらの条件をANDで結合したもの)
- 相関サブクエリー内では、あらゆるスカラーサブクエリー,
BLOB型,CLOB型に正式に対応- Tsurugi 1.3.0 から試験的機能として提供していた
BLOB型,CLOB型について、機能を大幅に拡張し正式に対応しました。詳細は以下のドキュメントを参照してください。 - 試験的機能からの主な変更点は以下のとおりです:
- リモート接続に対応
- これまではTsurugiサーバと同じローカル環境に配置したクライアントからのみ利用可能な特権モードを提供していましたが、リモートクライアントから利用可能なリレーモードに対応しました。
- リレーモードはgRPCを介してTsurugiとクライアントの間で
BLOB/CLOBデータを転送するモードで、本バージョンから各種クライアントライブラリでBLOB型,CLOB型を利用する際のデフォルトのモードとなります。
- 対応クライアントの拡張
- これまで対応していた Tsubakuro/Java, Iceaxe に加えて、以下のクライアントライブラリや周辺機能に対応しました。
- Tsurugi JDBC
- tsubakuro-rust-core (Rust API)
- tsubakuro-rust-ffi (C API)
- Tsurugi Python DB-API (Python API)
- Tsurugi MCP Server
- Tsurugi 1.11.0 では、Tsurugi ODBC Driver には未対応です。
- これまで対応していた Tsubakuro/Java, Iceaxe に加えて、以下のクライアントライブラリや周辺機能に対応しました。
- リモート接続に対応
- Tsurugi 1.3.0 から試験的機能として提供していた
機能追加と改善 - Endpoint
- Tsurugiの構成定義ファイル
tsurugi.iniについて、以下のオプションのデフォルト値を変更[grpc_server]セクションのenableのデフォルト値をtrueからfalseに変更- これまでは、Tsurugiに組み込まれた gRPCサーバー はデフォルトで有効化されていましたが、本バージョンからはデフォルトで無効化されるようになります。
- gRPCサーバーは、上述のリレーモードで
BLOB型,CLOB型 を利用する場合、および Tsurugi UDF の BLOB クライアント を利用する場合に必要となります。これらの機能を利用する場合は、[grpc_server]セクションのenableをtrueに設定してTsurugiを起動してください。
機能追加と改善 - Client
- Tsubakuro/Java
- BLOB型、CLOB型に正式対応
- Iceaxe
- BLOB型、CLOB型に正式対応 - 詳細は以下のドキュメントを参照してください:
tgsql- BLOB型、CLOB型に正式対応
tgsqlコマンドにLOB転送タイプを指定するオプション--lob-transfer-typeを追加 - 詳細は以下のドキュメントを参照してください:
- Tsurugi JDBC
- BLOB型、CLOB型に対応 - 詳細は以下のドキュメントを参照してください:
- Tsurugi MCPサーバー
- BLOB型、CLOB型に対応
- Tsurugiへの接続タイムアウトを指定する起動オプション
--db-timeoutを追加 - 詳細は以下のドキュメントを参照してください:
- tsubakuro-rust-core (Rust API)
- BLOB型、CLOB型に対応 - 詳細は以下のドキュメントを参照してください:
- tsubakuro-rust-ffi (C API)
- BLOB型、CLOB型に対応
- Tsurugi Python DB-API (Python API)
- BLOB型、CLOB型に対応 - 詳細は以下のドキュメントを参照してください:
機能追加と改善 - UDF
- Tsurugi UDFのリリース内容については、以下のドキュメントを参照してください:
- 前バージョンからの主な機能追加は以下のとおりです:
NULL値のサポート- UDF 呼び出し時のクライアントタイムアウトの指定に対応
- UDF プラグイン設定ファイルでの
grpc_server.endpoint指定に対応
機能追加と改善 - Distribution
- Ubuntu 26.04 に対応(試験的サポート)
- Ubuntu 26.04 ベースのTsurugi Dockerイメージを提供(試験的サポート)
- CMake 4.2.3 でのビルドに対応(試験的サポート)
- CMake 4.2.3 は Ubuntu 26.04 環境で
apt installによってインストールされるデフォルトのCMakeバージョンです。
- CMake 4.2.3 は Ubuntu 26.04 環境で
- インストーラーで環境にインストールする Apache Arrow のバージョンを
21.0.0から24.0.0に変更- Ubuntu 26.04 環境では Tsurugi の前バージョンまでのインストーラーでインストールされる Apache Arrow のバージョン
21.0.0が利用できず、インストーラーの実行に失敗します。Ubuntu 26.04 でインストーラーを利用する場合は、Apache Arrow のバージョンを24.0.0に変更した本バージョン以降のインストーラーを利用してください。
- Ubuntu 26.04 環境では Tsurugi の前バージョンまでのインストーラーでインストールされる Apache Arrow のバージョン
バグ修正
バグ修正 - SQL
- DML処理中にDDLを実行するとデータベースが不安定な状態になる
- Tsurugi 1.10.0 - Known Issues (ja) - TSURUGI-IS-177 DML処理中にDDLを実行するとデータベースが不安定な状態になる で記載する問題のうち「DMLとDDLを同一のトランザクション内で同時に実行した場合に不安定な状態となる」問題に対応しました。
HAVING句でCOUNT(DISTINCT ...)を複数回使用するクエリーを実行すると、データベースが異常終了することがある- セカンダリインデックスのキー列に
NULLが含まれる時、WHERE句の不等号でその列を使用するクエリが不正確な結果を返すことがある DROP INDEXでインデックス名ではなくテーブル名を指定した場合にエラーとならず成功してしまい、テーブルが不正な状態になるCREATE INDEXでDESCを指定したインデックスを作成し、そのインデックスを範囲検索に使用するクエリの結果が不正となることがあるNULLを含む列を使ってIN句をサブクエリに対して使用した場合のクエリ結果が不正となるIN句をサブクエリに使用し、その出力列がセカンダリインデックス、またはプライマリインデックスのキー列またはそのプレフィックス部分である場合に、クエリ結果が不正となることがある
バグ修正 - Transaction
- オフラインコンパクションツール
tglogutil compactionを実行した後のデータベース環境において、特定の条件下でデータベースが起動できなくなる、またはデータベースのデータ内容が不正な状態になることがある- 本件についてのバグレポート、およびワークアラウンドや問題発生時の対応方法などについては、以下を参照してください:
バグ修正 - Endpoint
tsurugi.iniに 重複したパラメータが存在した場合のTsurugi起動エラーのメッセージが不正
バグ修正 - Client
- Tsurugi Python DB-API : KeepAliveが正常に動作せず、接続したコネクションがTsurugiサーバーの設定
session.refresh_timeoutの期間後 (デフォルト: 300秒) に切断されてしまうことがある - Iceaxe : タイムアウト時間に0を指定すると、タイムアウトを無効にせず即時にタイムアウトしてしまう
バグ修正 - UDF
- サービス定義 (
service) を含む.protoを 別の.protoからimportを指定してインポートし、それをビルドすると不正なUDFプラグインとして生成される - メッセージ定義に
oneofを指定したフィールドを複数定義し、UDF呼び出し時に複数のフィールドに対してそれぞれ異なる型を指定するとエラーとなる - Protocol Buffer公式が提供する Well-Known Types を利用する
.protoをudf-plugin-builderでビルドするとエラーとなる
アップグレードについて
クライアント互換性リスト
Tsurugi 1.11.0 では 以下のクライアントに対応しています。
Tsurugi のアップグレードに併せて、必要に応じて各クライアントをアップグレードしてください。
Important
本バージョンでは BLOB型, CLOB型の正式対応に伴い、全てのクライアントにおいて下表に示すバージョンへのアップグレードが必要となります。
Important
Tsurugi UDF については、udf-plugin-builder を用いてUDFプラグインを再生成してデプロイする必要があります。
| Client | Version |
|---|---|
| Tsubakuro/Java | 1.16.0+ |
| Iceaxe | 1.16.0+ |
| Tanzawa | 1.16.0+ |
| Tsubakuro/Rust | 0.10.0+ |
| Tsurugi Python DB-API | 0.10.0+ |
| Tsurugi MCP Server | 0.8.0+ |
| Tsurugi JDBC | 0.5.0+ |
| Tsurugi UDF | 0.4.0+ |
アップグレード手順
旧バージョンからのアップグレード手順については、以下のドキュメントを参照してください。
その他
本バージョンにおける変更内容の一覧は、以下のChangelogを参照してください。
本バージョンに対する既知の問題、および本バージョンにて修正された問題の補足情報については、以下のリンクを参照してください。