#postgresql #jdbc #stored-functions
#postgresql #jdbc #хранимые функции
Вопрос:
У меня возникают проблемы с вызовом функции PostgreSQL из JDBC при следующих обстоятельствах. Хранимая функция endpoint_organizations
определяется следующим образом:
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
В чем может быть причина? Если я не ошибаюсь, это работало раньше. Я дважды проверил и трижды проверил сейчас, но не вижу, что может вызвать проблему.
Комментарии:
1. Есть ли у вас разрешение на выполнение этой функции с пользователем jdbc? Если не разрешить выполнение функции endpoint_organizations;
2. @d1ll1nger Да, у меня есть. Если я
psql -U <user>
попаду в базу данных иselect * from endpoint_organizations(1)
там, все будет работать нормально.
Ответ №1:
Это была (конечно) глупая ошибка с моей стороны. Я также внес последние обновления в сохраненную функцию после подключения к PostgreSQL с psql -U <user>
помощью вместо psql -U <user> <database>
, т.Е. Обновляет затронутую базу postgres
данных вместо <database>
, тогда как JDBC подключен к <database>
.
После выполнения обновлений в нужной базе данных все возвращается в нормальное русло.