2016-10-02 3 views
0

У меня проблемы с вызовом функции PostgreSQL из JDBC с учетом следующих обстоятельств. Сохраненная функция endpoint_organizations определяется следующим образом:Исключение «функция не существует» при выполнении хранимой функции PostgreSQL через JDBC

postgres=# \df public.endpoint_organizations 
              List of functions 
Schema |   Name   |    Result data type    | Argument data types | Type 
--------+------------------------+------------------------------------------+---------------------+-------- 
public | endpoint_organizations | TABLE(organizationid integer, name text) | staffid1 integer | normal 
(1 row) 

Я зову его с Java, как это:

int staffId = 1 
PreparedStatement endpointOrganizations = connection.prepareStatement("SELECT * FROM endpoint_organizations (?)"); 
endpointOrganizations.setInt(1, staffId); 
ResultSet resultSet = endpointOrganizations.executeQuery(); 

И я получаю это исключение:

org.postgresql.util.PSQLException: 
ERROR: function endpoint_organizations(integer) does not exist 
Hint: No function matches the given name and argument types. You might need to add explicit type casts. 
Position: 15 

Что может быть причиной ? Если я не ошибаюсь, это сработало раньше. Я проверял дважды и трижды проверял, но не вижу, что может вызвать проблему.

+0

У вас есть разрешение на выполнение этой функции с пользователем jdbc? Если не предоставить выполнение функции endpoint_organizations; – d1ll1nger

+0

@ d1ll1nger Да, у меня есть. Если я 'psql -U ' в базу данных и 'select * from endpoint_organizations (1)' там, все работает нормально. – Drux

ответ

1

Это была (конечно) глупая ошибка с моей стороны. Я сделал последние обновления также сохраненной функции после подключения к PostgreSQL с psql -U <user> вместо psql -U <user> <database>, то есть обновил базу данных с изменением базы данных postgres вместо <database>, тогда как JDBC подключился к <database>.

После выполнения обновлений в правой базе данных все возвращается к норме.