A5:SQL Mk-2

開発のこと、日々のこと

A5:SQL Mk-2でDROP TABLEとCREATE TABLEを実行してもデータが消えないようにする機能を実装

| 1件のコメント

データベースのテーブル定義を修正したら、いったんテーブルをDROP TABLEしてから、CREATE TABLEで作り直すことなどがよくあると思います。

でもこの時悩ましいのが、登録されているテーブルデータが消えてしまうこと。

ここで A5:SQL Mk-2 version 2.13.0 beta 35から、DROP TABLEの前にテンポラリテーブルを作ってデータを保存し、CREATE TABLEの後にテンポラリテーブルからデータをロード&テンポラリテーブル削除する機能を付けてみました。

以下のようにBackupToTempTable, RestoreFromTempTable 疑似命令を使います。

このように書くことで、以下のような動きをします。

1.$$TARGET_TABLEという名前(現状では元テーブルの前に$$を付けた名前で固定)でテンポラリテーブルが作られ、TARGET_TABLEテーブルのデータが保存されます。

2.DROP TABLEが実行されます。

3.CREATE TABLEが実行されます。

4.$$TARGET_TABLEテーブルからTARGET_TABLEにデータが書き戻され、成功したら、$$TARGET_TABLEは削除されます。

注意点として$$TARGET_TABLEからTARGET_TABLEにデータが書き戻されるとき、同じ名前の列のみ書き戻されます。新しいテーブルの列の長さが短くなるなどして、書き戻すのに失敗する可能性があることに注意が必要かもしれません。

あと、テーブルのデータ量は考慮しないので、巨大なテーブルではバックアップ&リストアで大量のトランザクションが発生してデータベースに負荷をかけてしまう可能性も注意が必要かもしれません。

A5:SQL Mk-2 version 2.13.0 beta 35ではERエディタから生成するDDLにはこれらの疑似命令はつかないですが、生成するDDLに標準でこれを付けるようにすれば、結構便利かと思うのですがどうでしょう?。

 

 

 

1件のコメント

  1. いつも大変便利に使わせていただいております。

    テンポラリテーブルからデータをロード&テンポラリテーブル削除する機能、非常に魅力的です。

    1点要望があるとしましたら、疑似命令ではなく、通常のSQL文を生成いただくオプション、は可能でしょうか。

    各DB間の差を吸収するという問題がありそうな気もしますので、もし可能であればというレベルの要望です。

    ご一考いただければ幸いです。

コメントを残す

必須欄は * がついています