1
SpatiaLite DBのテーブルの名前を適切に変更するにはどうすればよいですか?
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を導きます。