Java Запросы рекурсоров Spring замедляются - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь вызвать 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)
...