概要
本バージョンでは主にSQL機能を中心とした機能追加と改善が行われています。
またいくつかの重要な構成変更および非互換の変更が行われています。
アップグレードの際には以下の「構成変更と非互換の変更」の内容に注意してください。
機能追加と改善
-
SQL
INSERT INTO SELECT
文に対応INSERT INTO ... SELECT ...
INSERT OR REPLACE INTO ... SELECT ...
INSERT OR IGNORE INTO ... SELECT ...
BINARY
,VARBINARY
型に対応- SELECT/INSERT/UPDATE/DELETE文、ORDER BY句や大小比較、キャストなどの基本的な機能に対応
- バイナリ型リテラル、およびクライアントAPIのプレースホルダを経由したバイナリデータの登録に対応
tgsql
でバイナリ型の表示に対応- 本バージョンでは以下のような制約があります。
- 主キーまたはインデックスのキーの列として
VARBINARY
型は使用不可 - dump/load操作に未対応
- 主キーまたはインデックスのキーの列として
- 日付/時刻関数のサポート
CURRENT_DATE
LOCALTIME
CURRENT_TIMESTAMP
LOCALTIMESTAMP
- 日付/時刻リテラルのサポート
DATE 'YYYY-MM-DD'
TIME 'HH:MM:SS'
TIMESTAMP 'YYYY-MM-DD HH:MM:SS'
TIMESTAMP WITH TIME ZONE 'YYYY-MM-DD HH:MM:SS+HH:MM'
- (文字列型と日付/時刻型間のキャストについては次バージョン以降で対応予定)
- CREATE TABLE の際のカラムのデフォルト値に日付/時刻関数をサポート
CREATE TABLE t ( ..., ts TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP )
BETWEEN
述語のサポートIN
述語のサポート- 本バージョンでは値リストを伴うIN述語 (例:
x IN (a, b, c)
) のみ対応
- 本バージョンでは値リストを伴うIN述語 (例:
CHAR
,VARCHAR
型に対して主キーやインデックス指定のカラムを除き定義可能な最大サイズを約30KBから約2MBに拡張BINARY
,VARBINARY
型についても同様- IPCエンドポイントを利用する場合、
ipc_endpoint.datachannel_buffer_size
の設定値によりSELECTの結果セットのサイズに制約があることに注意してください。- 詳細は Tsurugi Troubleshooting Guide を参照してください。
TIMESTAMP WITH TIMEZONE
型に対してタイムゾーンオフセット (例:+09:00
) を考慮した正しい挙動に修正
-
Endpoint
- セッションの自動タイムアウトとクライアントからのKeep Aliveに対応
- クライアントから一定時間応答がないセッションを自動的にクローズしリソースを解放します。
- セッションの意図しないクローズを防ぐため、クライアントから定期的にKeep Aliveメッセージを送信することが可能です (デフォルトでKeep Aliveは有効になっています)。
- Keep AliveメッセージはTsubakuro 1.5.0 およびこれを利用するライブラリから有効です。古いバージョンのクライアントからはKeep Aliveメッセージが送られないことに注意してください。
- セッションの自動タイムアウトの設定は、構成定義ファイル
tsurugi.ini
のsession
セクションの各設定項目で変更可能です。
- セッションの自動タイムアウトとクライアントからのKeep Aliveに対応
-
Server Configuratios (
tsurugi.ini
で新たに指定可能となったオプション)session.zone_offset
- セッションのデフォルトタイムゾーンオフセットを指定するISO8601規定の文字列 (
±[hh]:[mm]
形式 やZ
) 。デフォルトはUTCを示す文字列。
- セッションのデフォルトタイムゾーンオフセットを指定するISO8601規定の文字列 (
SQL機能の詳細については Available SQL features in Tsurugi を参照してください。
構成変更と非互換の変更
本バージョンでは以下に示すTsurugiの構成変更、および旧バージョンに対する非互換の変更が行われています。
-
TCPエンドポイントをデフォルトで無効化
- 主にセキュリティ上の理由から、TCPエンドポイントはデフォルトで無効化されました。TCPエンドポイントを利用する場合は
tsurugi.ini
のstream_endpoint.enabled
をtrue
に設定してください。 - Tsurugi Dockerイメージ上では従来通り、TCPエンドポイントはデフォルトで有効化されています。
- 主にセキュリティ上の理由から、TCPエンドポイントはデフォルトで無効化されました。TCPエンドポイントを利用する場合は
-
旧SQLコンパイラ (Shakujoコンパイラ) の撤廃
- 旧SQLコンパイラ (Shakujoコンパイラ) とその依存モジュールはインストール構成から除外されました。
tsurugi.ini
のsql.dev_compiler_support=0
による旧SQLコンパイラの有効化設定は削除されました。
-
Ogawayamaの構成変更
- モジュール依存関係の整理によるリリース構成の見直しにより「Ogawayama Stub」とその依存モジュールはインストール構成から除外されました。Ogawayama Stubは tsurugi_fdw の依存モジュールであり、これを利用しない場合は不要です。
- Tsurugiサーバの一部として動作するOgawayamaモジュール「Ogawayama Bridge」は従来通りインストール構成に含まれます。
-
インストールアーカイブのディレクトリ構成変更
- インストールアーカイブの展開時、第1階層に
tsurugidb-<version>
ディレクトリが作成され、その配下にソースファイルなどが配置されるように変更されました。
- インストールアーカイブの展開時、第1階層に
バグ修正
-
SQL
- SELECTリストに同一の集約関数を2回書いた場合、不正な結果を返すことがある
- 精度0のDECIMALカラムのmax,min関数が不正な結果を返すことがある
TIMESTAMP WITH TIME ZONE
型に対するmax,min関数の結果がTIMESTAMP
型となる
-
Transaction
- 3つ以上のLTXの競合状態を伴う特定のケースでSerializability違反が検出されない
- 複数のOCC,LTXの競合状態を伴う特定のケースで削除済みのレコードが読めてしまう
- 複数のOCCでINSERT OR REPLACEとINSERTが競合した際に想定外のエラーやストールが発生することがある
- tsurugidb起動中にOSの最大オープン数を超えるとデータベースが不整合な状態で起動することがある
- 大量のテーブル作成後にシャットダウンを行うと正常にシャットダウンできないことがある
-
Endpoint
- IPC接続によるSELECT実行時に結果セットのサイズが
ipc_endpoint.datachannel_buffer_size
を超えるとレスポンスが返らない
- IPC接続によるSELECT実行時に結果セットのサイズが
-
Client APIs
TIMESTAMP WITH TIME ZONE
型に対してプレースホルダを使ったAPI経由で値を登録すると異常値となることがある
その他、細かい安定性の向上や動作の改善などが行われています。詳細については以下のChangelogを参照してください。
旧バージョンからのアップグレード手順については、以下のドキュメントを参照してくだいさい。
詳細は、下記をご覧ください。
https://github.com/project-tsurugi/tsurugidb/releases/tag/1.0.0-BETA6