フォーラムへの返信
-
投稿者投稿
-
松原正和
キーマスター>テーブルの制約やデータ型を変更する際に現テーブルを一時的に名前を変えて新テーブルを作ってデータを移行することをやっているときにFKで参照しているテーブルが名前が変わったからそれが反映された?ということでしょうか?
こちら気になったので追加で調査してみたのですが、SQLite における外部キーの管理方法からの問題ではないかと思えます。
SQLiteは他のテーブルにあるようなシステムカタログを持たず、テーブルの情報はCREATE TABLE をテキストのまま保持します。
この仕組みのため、テーブルのリネーム時は参照している外部キーを持つテーブルがないか sqlite_master テーブルを走査しリネーム対象テーブルがあればCREATE TABLE文を書き換える挙動をするようです。
しかし、参照先テーブルを削除する(エラーにならない)などすると外部キーがそのまま残るなどして、問題となるケースがあるようです。以下例)
1. テーブルA を作成
2. テーブルB を作成(外部キーでテーブルAを参照)
3. テーブルA を テーブルA´ に変更 (この時点で テーブルB の外部キーは テーブルA´ を指す)
4. 新しく テーブルA を作成
5. テーブルA´ を削除
6. 最終的に テーブルB の外部キーは(存在しなくなった) テーブルA´ を指したまま残る松原正和
キーマスターabeq さんこんにちは。お返事が遅くなり申し訳ありません。
(早くてもお返事は週末等になってしまいます。)
テーブルのソース(CREATE TABLE)で、FK先のテーブル名が正しく表示されない件ですが、こちらで検証したのですが、再現できませんでした。
後からテーブル名を変更した際に古いテーブル名で表示されるのかとも考えましたが、テーブルをリネームした後にテーブルのソースを確認すると新しいテーブル名になっていました。
A5:SQL Mk-2 の仕組みとしては、
select sql from sqlite_master where type=’table’ and name = ‘テーブル名’
のようなSQLで、CREATE TABLE 文を取得し、整形してから表示しているのですが、こちらではどのように出力されますでしょうか?松原正和
キーマスターnrkm さん、tkd さんこんにちは。
以前、データベースリンクが二重に表示される不具合があり、その対策に問題がありました。
もうすぐリリースする Version 2.21.1 で修正しますので少々お待ちください。松原正和
キーマスターKEITA さんこんにちは。
すみません、残念ながらVSCodeの拡張機能などのリリース予定はありません。
A5:SQL Mk-2 は Embarcadero Delphi で構築されていますが、個人で作成する規模としてはかなり規模の大きいソフトウェアとなっており、他の開発環境への移行または同等機能の開発はなかなかむつかしいように思えます。松原正和
キーマスターsh169 さんこんにちは。
> 1.INSERT、UPDATE、DELETEを実行する際に、確認メッセージを表示する設定はございますか?
こちらについてはDBの接続情報登録ダイアログで、「DBタイプ」の項目の「本番環境(あるいは注意が必要なデータベース)」にチェックを入れると、INSERT、UPDATE、DELETEの実行時、あるいはテーブルエディタからのデータ書き換え時などに確認ダイアログが表示されるようになります。
> 2.SQL構文を実行する際に、コミットの設定(自動コミット、手動コミット)を変更する設定はございますか?
こちらは、デフォルトでは即時コミットですが、オプションダイアログから、[データベース接続]タブで、「データベースの更新時に自動的にトランザクションを開始する(コミット/ロールバックはユーザーによる手動操作となります)」をチェックすると更新時にトランザクションを開始して、手動によるコミット・ロールバックとなります。
注意として、DBにもよりますが、トランザクションでのロックが他の接続ユーザー・アプリの使用ユーザーのDB更新を妨げることがあります。ローカルでない共有のDB・本番DBではトランザクション時間が長くならないように注意が必要です。松原正和
キーマスターすいさんこんにちは。
はい、テーブル定義書出力の仕組みを変えたときに不具合が混入したようです。Version 2.21.1 beta 2 で修正しておりますので、お試しいただければと思います。松原正和
キーマスターken1 さんこんにちは。
すみません、Version 2.21 系での不具合のようです。Version 2.21.1 beta 3 で修正しましたので、ご確認いただければと思います。松原正和
キーマスターやじゅさんこんにちは。
今のところ、Ctrl+Aで全選択はできないのですが、マウス操作などで範囲選択することでインデックスタブなどのコピーを行うことができます。松原正和
キーマスターtaka さんこんにちは。
現在のところ、A5:SQL Mk-2 で式インデックス(いわゆる関数インデックス)はサポートされません。ただし、利用できるようになると便利かと思いますので、次のメジャーバージョンアップ等で対応したいと思います。気長にお待ちいただければと思います。
松原正和
キーマスターkanamoto さんこんにちは。
テーブルのインポート機能の実行時間(開始時刻・終了時刻)ですが、現在のところ確認する方法はありません。
Version 2.21.1 beta 4 で、A5M2.log ファイルにデバッグ情報として出力するようにはしてみましたが、このファイルは私自身が、A5:SQL Mk-2 のデバッグ補助に出力しているファイルですので、やや扱いにくいとは思います。
A5M2.log はデフォルトでは出力されませんが、A5M2.exe と同じフォルダに A5M2.log の名前でからファイルを作ると内容が出力されるようになります。松原正和
キーマスターすいさんこんにちは。
Version 2.21.0 でテーブル定義書の出力に不具合があったようです。Version 2.21.1 beta 2 で修正しましたのでご確認いただければと思います。
https://a5m2.mmatsubara.com/beta/松原正和
キーマスターmasa さんこんにちは。
レジストリと設定ファイル(ポータブルモード)で大きく速度が異なることは基本的にはないはずなのですが、設定ファイル(ポータブルモード)使用時に開くタブ数が多くなったりしていないでしょうか?
開くタブ数が多くなるとレジストリ・設定ファイル(ポータブルモード)にかかわらず、起動が遅くなってしまいます。まずはタブ数が多い場合、少なくするようにすることをお勧めします。
もしそれでも設定ファイル(ポータブルモード)が遅く、レジストリモードを使いたい場合は、接続先のエクスポート・インポートでユーザー間の共有をされてはいかがでしょうか? 「データベースの追加と削除」ダイアログから行えます。
別の方法としては、バッチファイルなどを用意し、runas コマンドで特定のユーザーで実行するようにすれば、レジストリのまま作業者間で設定を共有できるのではないかと思います。
松原正和
キーマスターしみずさんこんにちは。
データベースの内容を登録のダイアログで、[SSK] タブの「SSL モード」を「無効 (SSLを使用しない)」以外に設定してみてはいかがでしょうか?松原正和
キーマスターhiyo さんこんにちは。
はい、ドメインを更新しないオプションについて、今週末の Version 2.21.0 release candidate 1 には間に合いませんでしたが、これは、Version 2.21.0 の正式版(1月末か2月頭くらい)までには修正を含めたいと思います。もう少々お待ちください。松原正和
キーマスターEngineer1201 さんこんにちは。
はい、今週末の Version 2.21.0 release candidate 1 には間に合いませんでしたが、これは、Version 2.21.0 の正式版(1月末か2月頭くらい)までには修正を含めたいと思います。もう少々お待ちください。 -
投稿者投稿