SpatiaLite DBのテーブルの名前を適切に変更するにはどうすればよいですか?


11

SpatiaLiteの空間レイヤー(テーブル)には、トリガー、インデックス、および(少なくとも)geometry_columnsテーブル内のエントリを含む、さまざまなサポートオブジェクトとメタデータが含まれます。私は、(できれば)必要なすべての変更を一度に処理するGUI、または(フォールバック)必要なすべての変更のドキュメントを探して、空間レイヤーを壊さないようにしています。

テーブルには次のものがあります。

  1. のエントリgeometry_columns.f_table_name
  2. という名前の5つのトリガー[prefix]_[table_name]_geometry。ここで、prefixはトランザクションのロールバックかインデックスの更新かを示します。
  3. という名前の3つの空間インデックス idx_[table_name]_geometry[_suffix]

QGIS DB ManagerとSpatiaLite-GUIの2つのアプリケーションでこれを試しました。

QGIS DBマネージャーには、次の効果があります。

  1. geometry_columns新しいテーブル名で正しく更新する
  2. トリガーの名前を変更しません。トリガー定義はBEFORE [INSERT|UPDATE|DELETE]、新しいテーブル名を参照するように部分的に変更されますが、条件はまだで古い名前を検索しgeometry_columnsます。
  3. 空間インデックスの名前を変更しません。トリガーはまだ古いインデックス名を参照しているため、これが重要かどうかはわかりません。

SpatiaLite-GUIで[メンテナンス]→[テーブル名の変更]を選択すると、SQL ALTER TABLEステートメントのスタブが取得されます。これは簡単なSQLであり、QGIS DBマネージャーよりもさらに機能しません。新しいテーブル名を入力すると、テーブルの名前が変更されます。その他の効果:

  1. では、テーブルの名前は変更されませgeometry_columns.f_table_name。つまり、多くのGISはテーブルを空間レイヤーとして認識しません。
  2. トリガーの名前を変更しません。トリガー定義はBEFORE [INSERT|UPDATE|DELETE]、新しいテーブル名を参照するように部分的に変更されますが、条件はまだで古い名前を検索しgeometry_columnsます。
  3. 空間インデックスの名前を変更しません。トリガーはまだ古いインデックス名を参照しているため、これが重要かどうかはわかりません。

Spatialite-GUIには、正しいエントリを追加するジオメトリ列を復元するオプションgeometry_columnsがあります(ただし、SRID、ジオメトリタイプ、ディメンションを指定する必要があります)。空間インデックスを構築または再構築し、トリガーを復元しますが、なしこれらの関数のいくつかは、古いテーブル行、トリガー、またはインデックスを削除し、多くの(おそらく無害ですが迷惑な)Schmutzを含むDBを導きます。


3
シェイプファイルを削除する場合は、SpatiaLiteのフィールドの並べ替え、名前の変更、削除などの「テーブルマネージャー」が非常に必要だと思います。しかし、未知の理由で、私が知る限り、それを支援するツールはありません。クラウドファンディングのイニシアチブにとっては良いプロジェクトになるでしょう!
ベルントV.

spatialite-guiのどのバージョンをお持ちですか?
user30184

SpatiaLite-GUI 1.7.1。
リーハチャドリアン

回答:


2

新しいテーブル名でテーブルをコピーし、データをコピーするときに列の名前を変更する必要があります。これにはテーブルマネージャ関数が理想的ですが、GUI用にはまだ作成されていません。以下のリンクは、SQLiteのサンプルコードを使用したこれに関するいくつかの正式な情報を示しています。SpatiaLiteはSQLiteの一部であるため、コーディングは同じです。幸運を!

https://blog.xojo.com/2013/12/04/renaming-columns-in-sqlite-tables/


質問は、ではなくテーブルの名前を変更することに注意してください。リンクされたページでこのステートメントについて説明していますが、この質問はすでに空間データベースにとって不十分な理由をすでに扱っています。ALTER TABLE
リーハチャドリアン

あなたのコメントを念頭に置いてこれをさらに検討した後、これを行い、トリガーおよび他の構造コンポーネントを維持する適切な方法があるとは思わない。コードを書き直す必要があるか、テーブルをエクスポートする場合(そうする予定がある場合)、QGISのdbマネージャーで別の名前を使用してください。
ジュリア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.