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

相关推荐
码士集团小青1 小时前
Google 开源了啥,让 AI Agent 碰数据库不再是定时炸弹
数据库·oracle
CS创新实验室2 小时前
数据库突然断电,凭什么没丢数据?——WAL 日志与崩溃恢复
数据库·mysql
Warolitbos2 小时前
【数据库】SQL面试基础15题,测试/开发必背速查
数据库
ClouGence2 小时前
开源数据库管理工具 CloudDM 新版本上线,新增 AI SQL 助手,支持 Elasticsearch、崖山数据库
数据库·sql·elasticsearch
ly76893 小时前
PostgreSQL 执行计划深读:从 EXPLAIN 输出到代价模型驱动的 SQL 改写
数据库·sql·postgresql·explain·执行计划·代价模型
Python自动化直播3 小时前
自动化笔记:素材管理、命名、轮换的几条土办法
linux·运维·数据库
xiaomuzuirenzhen3 小时前
2027校招ERP实施顾问:大数据管理与应用专业如何用SQL、BI证明业务能力
大数据·数据库
底层玩家老张4 小时前
从副本集到分片:百亿级文档数据的KES架构边界
数据库·分布式架构·分片·架构选型·文档数据库
ss2734 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 16 PostgreSQL子查询与嵌套查询(下)
数据库·笔记·postgresql