SpatiaLiteの空間レイヤー(テーブル)には、トリガー、インデックス、および(少なくとも)geometry_columns
テーブル内のエントリを含む、さまざまなサポートオブジェクトとメタデータが含まれます。私は、(できれば)必要なすべての変更を一度に処理するGUI、または(フォールバック)必要なすべての変更のドキュメントを探して、空間レイヤーを壊さないようにしています。
テーブルには次のものがあります。
- のエントリ
geometry_columns.f_table_name
。 - という名前の5つのトリガー
[prefix]_[table_name]_geometry
。ここで、prefixはトランザクションのロールバックかインデックスの更新かを示します。 - という名前の3つの空間インデックス
idx_[table_name]_geometry[_suffix]
QGIS DB ManagerとSpatiaLite-GUIの2つのアプリケーションでこれを試しました。
QGIS DBマネージャーには、次の効果があります。
geometry_columns
新しいテーブル名で正しく更新する- トリガーの名前を変更しません。トリガー定義は
BEFORE [INSERT|UPDATE|DELETE]
、新しいテーブル名を参照するように部分的に変更されますが、条件はまだで古い名前を検索しgeometry_columns
ます。 - 空間インデックスの名前を変更しません。トリガーはまだ古いインデックス名を参照しているため、これが重要かどうかはわかりません。
SpatiaLite-GUIで[メンテナンス]→[テーブル名の変更]を選択すると、SQL ALTER TABLE
ステートメントのスタブが取得されます。これは簡単なSQLであり、QGIS DBマネージャーよりもさらに機能しません。新しいテーブル名を入力すると、テーブルの名前が変更されます。その他の効果:
- では、テーブルの名前は変更されません
geometry_columns.f_table_name
。つまり、多くのGISはテーブルを空間レイヤーとして認識しません。 - トリガーの名前を変更しません。トリガー定義は
BEFORE [INSERT|UPDATE|DELETE]
、新しいテーブル名を参照するように部分的に変更されますが、条件はまだで古い名前を検索しgeometry_columns
ます。 - 空間インデックスの名前を変更しません。トリガーはまだ古いインデックス名を参照しているため、これが重要かどうかはわかりません。
Spatialite-GUIには、正しいエントリを追加するジオメトリ列を復元するオプションgeometry_columns
があります(ただし、SRID、ジオメトリタイプ、ディメンションを指定する必要があります)。空間インデックスを構築または再構築し、トリガーを復元しますが、なしこれらの関数のいくつかは、古いテーブル行、トリガー、またはインデックスを削除し、多くの(おそらく無害ですが迷惑な)Schmutzを含むDBを導きます。