【发布时间】:2015-08-02 19:48:20
【问题描述】:
我正在使用 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
我需要做什么才能使三元组匹配起作用?
【问题讨论】:
-
您是否 100% 确定您正在使用同一个用户连接到同一个数据库?
-
@RadekPostołowicz 是的,我是。我目前只有一个数据库和一个用户。
-
你能发布两次
select current_database(), current_schema(), current_schemas(true), current_user, inet_client_addr(), inet_client_port(), inet_server_addr(), inet_server_port(), pg_my_temp_schema(), pg_postmaster_start_time(), session_user, version();执行的结果吗:一次在 psql 中,一次来自应用程序的 java 代码? -
@RadekPostołowicz 结果来自 psql:
"sapling , , {pg_catalog} , postgres , 192.168.0.13 , 20290 , 192.168.0.3 , 5432 , 0 , "2015-05-21 12:00:20.422757+02" , postgres , "PostgreSQL 9.1.15 on x86_64-unknown-linux-gnu , compiled by gcc (Debian 4.7.2-5) 4.7.2 , 64-bit""结果来自 java:sapling , , {pg_catalog} , postgres , 192.168.0.13 , 19955 , 192.168.0.3 , 5432 , 0 , "2015-05-21 12:00:20.422757+02" , postgres , "PostgreSQL 9.1.15 on x86_64-unknown-linux-gnu , compiled by gcc (Debian 4.7.2-5) 4.7.2 , 64-bit" -
我正在使用来自 postgres HP 的
JDBC41 Postgresql Driver, Version 9.4-1201驱动程序:jdbc.postgresql.org/download.html
标签: spring postgresql tomcat jdbc