Uploaded image for project: 'Nuxeo Platform'
  1. Nuxeo Platform
  2. NXP-11030

PostgreSQL directory auto-incremented ids may fail to return

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 5.6.0-HF10
    • Fix Version/s: 5.5.0-HF18, 5.6.0-HF15, 5.7.1
    • Component/s: Core VCS
    • Environment:
      PostgreSQL (Linux Debian)

      Description

      In a directory with an auto-incremented id field, sometimes at creation time an exception is returned, because PostgreSQL actually returns the wrong column value instead of the auto-generated one.

      Error exception:

      Caused by: org.nuxeo.ecm.directory.DirectoryException: createEntry failed
              at org.nuxeo.ecm.directory.sql.SQLSession.createEntry(SQLSession.java:261)
              at org.easysoa.registry.integration.EndpointStateServiceImpl.createIndicator(EndpointStateServiceImpl.java:102)
              at org.easysoa.registry.integration.EndpointStateServiceImpl.createSlaOlaIndicators(EndpointStateServiceImpl.java:71)
              ... 71 more
      Caused by: org.postgresql.util.PSQLException: Bad value for type long : OLA TdrWebService
              at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toLong(AbstractJdbc2ResultSet.java:2776)
              at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getLong(AbstractJdbc2ResultSet.java:1999)
              at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getLong(DelegatingResultSet.java:228)
              at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getLong(DelegatingResultSet.java:228)
              at org.nuxeo.ecm.core.storage.sql.jdbc.dialect.DialectPostgreSQL.getFromResultSet(DialectPostgreSQL.java:298)
              at org.nuxeo.ecm.core.storage.sql.jdbc.db.Column.getFromResultSet(Column.java:215)
              at org.nuxeo.ecm.directory.sql.SQLSession.createEntry(SQLSession.java:255)
              ... 73 more
      

      See similar problem in hibernate http://www.postgresql.org/message-id/flat/4D905F65.4030207@visitlondon.com#4D905F65.4030207@visitlondon.com

      The solution is to call prepareStatement and pass it explicitly the columns we want returned, instead of just Statement.RETURN_GENERATED_KEYS (which the PostgreSQL JDBC driver interprets as adding RETURNING * to the query, which has the wrong behavior if the first column is not the id).

        Attachments

          Issue Links

            Activity

              People

              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: