duckdb支持空间查询

1 duckdb支持空间查询需要在联网环境下安装DuckDB-Spatial扩展,执行

install spatial

如果服务器没有网络需要下载好 spatial.duckdb_extension文件,然后放置在服务器某个路径下, 通过指定路径方式执行扩展命令:

install /base_path/spatial.duckdb_extension

2 安装完DuckDB-Spatial扩展后还不能直接使用,需要在每次连接数据库时执行:

load spatial

spatial扩展才能生效,因为扩展是不会自动加载的

在springboot工程中,想初始化时安装扩展并且每次创建连接时自动加载spatial扩展,可使用hikariCP的setConnectionInitSql()方法来实现,如下代码仅供参考:

    @Bean(name = "duckdbDataSource")
    public DataSource duckdbDataSource(
            @Qualifier("duckdbHikariConfig") HikariConfig hikariConfig) {

        HikariDataSource dataSource = new HikariDataSource(hikariConfig);

        try (Connection duckConn = dataSource.getConnection();
             Statement stmt = duckConn.createStatement()) {
            if (loadExtFileEnable) {
                Path configDir = Paths.get("config");
                Path targetFile = configDir.resolve("spatial.duckdb_extension");

                if (!Files.exists(targetFile)) {
                    InputStream is = this.getClass().getResourceAsStream("/ext/spatial.duckdb_extension");
                    if (is == null) {
                        throw new RuntimeException("Resource not found: /ext/spatial.duckdb_extension");
                    }
                    Files.copy(is, targetFile, StandardCopyOption.REPLACE_EXISTING);
                }
                log.info(String.format("INSTALL '%s'", "./config/spatial.duckdb_extension"));
                stmt.execute(String.format("INSTALL '%s'", "./config/spatial.duckdb_extension"));
            } else {
                stmt.execute("INSTALL spatial");
            }
        }catch (Exception e){
            log.info("load spatial error:{}",e);
        }

        hikariConfig.setConnectionInitSql("load spatial");
        return new HikariDataSource(hikariConfig);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值