问题现象
在 DBeaver 中打开一个含空间数据的 SQLite 库,几何字段是用blob存储的,执行:
sql
select st_astext(cl.Geometry) from City;
界面报错(截图中的错误):
text
SQL 错误 [1]: [SQLITE_ERROR] SQL error or missing database (no such function: st_astext)
很明显,是缺少spatialite扩展了。
解决过程
获取spatialite
DBeaver带的Sqlite驱动是没有空间扩展的,需要自己附加。推荐去官网下载,根据自己的环境选择合适的包。解压后确认相关依赖的完整,除了主要的mod_spatialite库外,还有其依赖的geos、proj等。
允许加载扩展
两种入口,任选其一:
-
数据库导航器中右键连接 →
编辑连接→驱动设置 (Driver Settings)→驱动属性 (Driver Properties);或在新建/编辑连接对话框的
驱动属性标签页。
-
新建连接 →
驱动属性。
找到 enable_load_extension,把 Value 设为 true,保存。
加载扩展
方式 A:在 SQL 编辑器里临时加载(只对当前这条连接生效)
sql
SELECT load_extension('C:/spatialite/mod_spatialite.dll');
方式 B(推荐):写进连接初始化 SQL,每条新连接自动加载
编辑连接→初始化 (Initialization)→初始化 SQL (Initialization SQL / bootstrap query)- 填入:
sql
SELECT load_extension('C:/spatialite/mod_spatialite.dll');
tips:
这里有个小坑,建议把spatialite加载到环境变量中,否则依然会导致mod_spatialite.dll失败,因为程序找不到他相关的依赖库。并且推荐使用方式B,要不每次连接后都要先进行load_extension调用。
使用st函数
之后就正常使用st函数了。
使用前可以先做个验证
sql
SELECT spatialite_version();
如果返回版本号(如 5.1.0),就说明扩展加载成功。