微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

spring – 在JDBC中启用PostgreSQL扩展

我正在使用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 ;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐