在 JDBC 中启用 PostgreSQL 扩展
Enable PostgreSQL extensions in JDBC
我正在使用 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 中,每个对象(无论是 table、索引还是函数)都属于 schema。正如您在评论中所说,您使用 :
安装了扩展程序
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 + 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 中,每个对象(无论是 table、索引还是函数)都属于 schema。正如您在评论中所说,您使用 :
安装了扩展程序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 ;