2014-12-16 4 views
1

Я использую запрос SQL, который использует пользовательскую письменную функцию, аналогичную этойPostgreSQL не существует

CREATE OR REPLACE FUNCTION per_cont(myarray integer[], percentile real) 

Это прекрасно работает в инструменте pgAdmin, но когда я использую этот запрос в моей Java-приложение это дает мне ошибку:

function per_cont(integer[], real) does not exist 

Я использую библиотеку JDBI для взаимодействия с базой данных. Почему он не находит функцию при запуске приложения из java-приложения? Как я могу это исправить?

+1

Вы не подключаете к той же базе данных вы думаете, вы, скорее всего. –

+0

Я также думал, что я делаю эту ошибку, но проверил ее несколько раз. В JDBI мы должны импортировать функцию postgresql извне или эта библиотека автоматически распознает функции? –

+0

*** Как *** вы «используете» функцию точно? Очевидно, что вы должны предоставить команду, которая вызвала сообщение об ошибке. И обязательно укажите полное сообщение об ошибке. И ваша версия Postgres (как всегда *). –

ответ

2

Сообщение об ошибке не имеет значения вообще для команды CREATE OR REPLACE FUNCTION, которую вы показываете. Предполагая, что вы на самом деле вызов функции в заявлении DML как

SELECT per_cont('{1,2,3}', 1); 

Очевидно, что вы должны использовать ту же базу данных, но вы говорите, что была создана.

Ваш search_path также должен соответствовать. Поскольку вы не предоставляете схему явно, функция создается в «текущей» схеме при ее создании. Эта же схема должна отображаться в search_path другого сеанса или функция не видна.

Подробные инструкции в связанном ответ:

Смежные вопросы