gpt4 book ai didi

spring - 在 JDBC 中启用 PostgreSQL 扩展

转载 作者:行者123 更新时间:2023-11-29 11:34:18 24 4
gpt4 key购买 nike

我正在使用 Spring + Tomcat8 和 PostgreSQL 9.2。我安装了 Trigram用于改进表格搜索的数据库扩展。

当我手动连接到我的数据库时,以下语句有效:

SELECT id, name, similarity(name, 'a') FROM dev.customer WHERE name % 'a' ORDER BY similarity ;

但是,当我在 Spring 中使用 jdbcTemplate.query() 尝试此操作时,出现错误:

PSQLException: ERROR: function similarity(character varying, character varying) does not exist

当我删除 similarity() 函数并仅使用 % 运算符时,出现以下异常:

ERROR: operator does not exist: character varying % character varying

似乎需要配置 postgres jdbc 驱动程序以支持非标准语法:https://jdbc.postgresql.org/documentation/81/ext.html

我的 tomcat 安装的 server.xml 包含以下资源:

<Resource name="jdbc/NasPostgresDB" auth="Container" type="javax.sql.DataSource"
username="usr" password="pwd"
url="jdbc:postgresql://127.0.0.1/dbname"
driverClassName="org.postgresql.Driver"
initialSize="5" maxWait="5000"
maxActive="120" maxIdle="5"
validationQuery="select 1"
poolPreparedStatements="true"/>

哪个应该是正确的:https://jdbc.postgresql.org/documentation/81/load.html

我具体需要做什么才能使三元组匹配发挥作用?

最佳答案

在 PostgreSQL 中,每个对象(无论是表、索引还是函数)都属于一个模式。正如您在评论中所说,您安装了扩展程序:

SET SCHEMA 'dev'; CREATE EXTENSION pg_trgm;

我假设这些函数可以在dev shema 中访问。

如果是这种情况,您应该能够以这种方式在 JDBC 中使用它们:

SELECT id, name, dev.similarity(name, 'a') as similarity FROM dev.customer 
WHERE name % 'a' ORDER BY similarity ;

关于spring - 在 JDBC 中启用 PostgreSQL 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30368724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com