在 DBeaver 中为 SQLite 启用 SpatiaLite

问题现象

在 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等。

允许加载扩展

两种入口,任选其一:

  1. 数据库导航器中右键连接 → 编辑连接 → 驱动设置 (Driver Settings) → 驱动属性 (Driver Properties);

    或在新建/编辑连接对话框的 驱动属性 标签页。

  2. 新建连接 → 驱动属性。

找到 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),就说明扩展加载成功。

相关推荐
笃行35025 分钟前
AI数据库的库内四层结构,KingbaseES 产品拆解
数据库
我是大猴子2 小时前
redis
数据库·redis·缓存
苏宸啊4 小时前
MySQL(一)
数据库·mysql
2603_969694855 小时前
JDBC 基础学习笔记:API 核心原理解析与 CRUD 代码实操
数据库·笔记·mysql·学习方法·database·sql注入
这个DBA有点耶5 小时前
库内语义构建 vs 外挂向量库:业务语义缺失,才是RAG“胡说八道”的根源
数据库·mysql·aigc
kobe_OKOK_6 小时前
mysql 开启 binlog 日志
数据库·mysql
鸽芷咕7 小时前
KingbaseES 调参先看执行计划,参数是答案不是起点
数据库
这个DBA有点耶7 小时前
MySQL 8.0直方图:统计信息升级了,执行计划为什么还是选错?
数据库·mysql·代码规范
老纪的技术唠嗑局9 小时前
把 seekdb 塞进 iOS App:让混合检索嵌入手机
数据库
ClouGence10 小时前
开源数据库管理工具 CloudDM 新版本发布,支持 OpenSearch、IoTDB 数据源
数据库·开源