Babelfish для Aurora PostgreSQL не возвращает сгенерированный идентификатор строки

Недавно мы преобразовали нашу базу данных SQL Server в AWS Aurora PostgreSQL (v.13.6).

Мы используем Babelfish для Aurora PostgreSQL для подключения к базе данных с драйвером Java 8, JDBC и SQL Server. Во время тестирования мы обнаружили, что Babelfish НЕ возвращает сгенерированный идентификатор строки в операторах вставки SQL (код ниже). Как это можно исправить?

Драйвер SQL-сервера:

      <dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>10.2.1.jre8</version>
 </dependency>

Однако тот же тестовый код работает при использовании URL-адреса PostgreSQL и драйвера postgres. (возвращает сгенерированный идентификатор строки)

Постгрес драйвер:

      <dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.4.0</version>
</dependency>

Тестовый код:

          private void testInsert(String dbUrl, String sql) {
        logger.debug("dbUrl: {}", dbUrl);
        try (Connection conn = DriverManager.getConnection(
                dbUrl, DBUtil.DB_USERNAME, DBUtil.DB_PASSWORD);
             PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
            setValues(ps);
            conn.setAutoCommit(false); // begin Transaction
            logger.debug("executeUpdate: {}", sql);

            int rows = ps.executeUpdate();

            logger.debug("rows: {}", rows);
            
            try (ResultSet rs = ps.getGeneratedKeys()) {
                logger.debug("rs: {}", rs);
                if (rs.next()) {
                    Long id = rs.getLong(1);
                    logger.debug("id: {}", id);
                }
                else {
                    logger.debug("ResultSet is empty");
                }
            }
          
            conn.rollback();
 //           conn.commit();
        } catch (SQLException e) {
            logger.error(null, e);
        }
    }

Выход:

      # results with Babelfish URL & SQL Server driver: (returns 0 for row ID)
rows: 1
rs: SQLServerResultSet:1
id: 0

# results with PostgreSQL URL & postgres driver: (returns the row ID)
rows: 1
rs: org.postgresql.jdbc.PgResultSet@2aceadd4
id: 1548

0 ответов

Другие вопросы по тегам