如何在SpatiaLite数据库中正确重命名表?


11

SpatiaLite中的空间层(表)包括各种支持对象和元数据,包括(至少)geometry_columns表中的触发器,索引和条目。我正在寻找(最好是)一口气处理所有必要更改的GUI,或者寻找所有必需更改的(备用)文档,以免破坏空间层。

表有:

  1. 输入geometry_columns.f_table_name
  2. 有五个名为的触发器[prefix]_[table_name]_geometry,其中前缀表示这是事务回滚还是索引更新。
  3. 命名为三个空间索引 idx_[table_name]_geometry[_suffix]

我已经在两个应用程序QGIS DB Manager和SpatiaLite-GUI中进行了尝试。

QGIS DB Manager出现具有以下效果:

  1. geometry_columns用新表名正确更新
  2. 不重命名触发器。触发器定义已部分修改,以BEFORE [INSERT|UPDATE|DELETE]引用新的表名,但条件仍在中搜索旧名称geometry_columns
  3. 不重命名空间索引。不确定这是否重要,因为触发器仍引用旧的索引名称。

当您在SpatiaLite-GUI中选择“维护”→“重命名”表时,您仅获得一条SQL ALTER TABLE语句的存根。这是简单易懂的SQL,甚至比QGIS DB Manager还少。如果您填写新的表名,该表将被重命名。其他效果:

  1. 表格在中重命名geometry_columns.f_table_name,这意味着许多GIS不会将表格视为空间层。
  2. 不重命名触发器。触发器定义已部分修改,以BEFORE [INSERT|UPDATE|DELETE]引用新的表名,但条件仍在中搜索旧名称geometry_columns
  3. 不重命名空间索引。不确定这是否重要,因为触发器仍引用旧的索引名称。

请注意,Spatialite-GUI确实提供了恢复几何列的选项,该列将向其添加正确的条目geometry_columns(但要求您指定SRID,几何类型和尺寸),构建或重建空间索引以及恢复触发器,但没有这些功能中的一部分会删除旧的表行,触发器或索引,从而导致其中包含很多(可能无害但令人讨厌)schmutz的数据库。


3
我认为,如果我们想摆脱形状文件,非常需要“表管理器”来重新排列,重命名,删除SpatiaLite中的其他字段。但是,据我所知,由于未知的原因,没有这样的工具可以帮助我们。对于众筹计划而言,这可能是一个好项目!
Bernd V.

您有哪个版本的spatialite-gui?
user30184

SpatiaLite-GUI 1.7.1。
Lee Hachadoorian 2015年

Answers:


2

复制数据时,需要使用新的表名复制表并重命名列。一个表管理器功能将是理想的选择,但尚未为gui创建。下面的链接通过SQLite中的示例代码显示了一些正式信息。SpatiaLite是SQLite的一部分,因此编码是相同的。祝好运!

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


请注意,问题是关于重命名而不是。链接的页面讨论了该ALTER TABLE语句,但是问题已经解决了为什么这对于空间数据库而言是不够的。
Lee Hachadoorian

考虑到您的评论后再仔细研究一下,我认为没有足够的方法来执行此操作并维护触发器和其他结构组件。似乎您需要重新编写代码,或者在导出表时(如果计划这样做),请在QGIS的db管理器中使用其他名称。
朱莉娅
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.