Я пытаюсь вызвать postgresql функции, работающие с параметром refcursor. Впервые он работает отлично, но со временем скорость запроса падает примерно до 10 секунд на запрос. У кого-нибудь есть идеи? Заранее спасибо за помощь. Вот как я вызываю функцию:
@Transactional
public List<Table> getTable(TableFilter entity) {
List<Table> tableList = new ArrayList<>();
String cursor = "cursor_" + UUID.randomUUID().toString();
String function = "{? = call mySchema.gettable('" + cursor + "',?)}";
try (Connection conn = jdbcTemplate.getDataSource().getConnection();
CallableStatement cs = conn.prepareCall(function);
) {
ObjectMapper objectMapper = new ObjectMapper();
PGobject jsonbObj = new PGobject();
jsonbObj.setType("json");
jsonbObj.setValue(objectMapper.writeValueAsString(entity));
conn.setAutoCommit(false);
cs.registerOutParameter(1, Types.REF_CURSOR);
cs.setObject(2, jsonbObj);
cs.execute();
ResultSet resultSet = (ResultSet) cs.getObject(1);
while (resultSet.next()) {
tableList.add(new Table(
resultSet.getInt("id"),
resultSet.getString("number")
));
}
conn.commit();
} catch (SQLException e) {
log.error("SQL State: {}", e.getSQLState(), e);
} catch (Exception e) {
log.error("Error while fetching getTable data.", e);
}
return tableList;
}
И объявленная функция:
mySchema.gettable(INOUT refcur refcursor, inJson json)