这里是我正在使用 PreparedStatement
执行的查询语句
SELECT planner.udf_desc.* FROM planner.udf_desc WHERE id IN(3,2) ORDER BY idx(array[3,2], id);
我在planner
模式下有一张名为udf_desc
的表。
为了使其正常工作,我在我的数据库中安装了intarray
扩展。
create extension "intarray"
我正在使用 Linux 机器。我曾在另外三台机器上尝试过(都是 Linux),但现在我在 Windows 机器上尝试同样的事情时,它却无法工作,并显示以下错误:
function idx(integer[], integer) does not exist
我在其他三台Windows机器上尝试了它,但它无法工作。
我在服务器控制台上打印了堆栈跟踪信息。
18:01:40,505 ERROR [com.ers.dao.UdfDao] (default task-13) SELECT planner.udf_desc.* FROM planner.udf_desc WHERE id IN(2) ORDER BY idx(array[2], id)
18:01:40,517 ERROR [stderr] (default task-13) java.sql.SQLException: ERROR: function idx(integer[], integer) does not exist
18:01:40,517 ERROR [stderr] (default task-13) Hint: No function matches the given name and argument types. You might need to add explicit type casts.
18:01:40,520 ERROR [stderr] (default task-13) Position: 73 Query: SELECT planner.udf_desc.* FROM planner.udf_desc WHERE id IN(2) ORDER BY idx(array[2], id) Parameters: []
18:01:40,522 ERROR [stderr] (default task-13) at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:392)
18:01:40,524 ERROR [stderr] (default task-13) at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:351)
18:01:40,526 ERROR [stderr] (default task-13) at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:289)
所有机器上的内容都一样,但是idx
函数在一个机器上能用,在另一个机器上不能用。
create extension intarray
。 - user330315planner.
限定了表名...扩展和函数存在于特定的模式中,就像其他数据库对象一样,比如您的表;但扩展有点特殊:它们可以在每个数据库中创建一次——但仍然在一个模式内)。 - pozs