DB Exception since upgrading to platform v6.2.5

Since upgrading my application to the latest platform maintenance release, I’ve been getting the following exception on my live environment.

I wondered if you might know what this might be indicative of? Clearly it seems to show that my DB schema structure is not what it should be, but I’m unsure why as I don’t believe that the upgrade from the previous maintenance release incurred any schema changes.

Many thanks

com.haulmont.cuba.core.global.RemoteException:
---
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.2.cuba6): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: column t0.rows_count does not exist
  Position: 596
Error Code: 0
Call: SELECT t1.ID, t1.BOOLEAN_VALUE, t1.CODE, t1.CREATE_TS, t1.CREATED_BY, t1.DATE_VALUE, t1.DELETE_TS, t1.DELETED_BY, t1.DOUBLE_VALUE, t1.ENTITY_ID, t1.ENTITY_VALUE, t1.INTEGER_VALUE, t1.STRING_VALUE, t1.UPDATE_TS, t1.UPDATED_BY, t1.VERSION, t1.CATEGORY_ATTR_ID, t0.ID, t0.CATEGORY_ENTITY_TYPE, t0.CODE, t0.CREATE_TS, t0.CREATED_BY, t0.DATA_TYPE, t0.DEFAULT_BOOLEAN, t0.DEFAULT_DATE, t0.DEFAULT_DATE_IS_CURRENT, t0.DEFAULT_DOUBLE, t0.DEFAULT_ENTITY_VALUE, t0.DEFAULT_INT, t0.DEFAULT_STRING, t0.DELETE_TS, t0.DELETED_BY, t0.ENTITY_CLASS, t0.ENUMERATION, t0.LOOKUP, t0.NAME, t0.ORDER_NO, t0.REQUIRED, t0.ROWS_COUNT, t0.SCREEN, t0.TARGET_SCREENS, t0.UPDATE_TS, t0.UPDATED_BY, t0.VERSION, t0.WIDTH, t0.CATEGORY_ID, t2.ID, t2.DISCRIMINATOR, t2.CREATE_TS, t2.CREATED_BY, t2.DELETE_TS, t2.DELETED_BY, t2.ENTITY_TYPE, t2.IS_DEFAULT, t2.NAME, t2.SPECIAL, t2.UPDATE_TS, t2.UPDATED_BY, t2.VERSION FROM SYS_ATTR_VALUE t1 LEFT OUTER JOIN SYS_CATEGORY_ATTR t0 ON (t0.ID = t1.CATEGORY_ATTR_ID) LEFT OUTER JOIN SYS_CATEGORY t2 ON (t2.ID = t0.CATEGORY_ID) WHERE ((t1.ENTITY_ID IN (?)) AND (t1.DELETE_TS IS NULL))
	bind => [b9af0ef3-c1ed-9cbb-beae-ff347dfd83a0]
Query: ReadAllQuery(referenceClass=CategoryAttributeValue sql="SELECT t1.ID, t1.BOOLEAN_VALUE, t1.CODE, t1.CREATE_TS, t1.CREATED_BY, t1.DATE_VALUE, t1.DELETE_TS, t1.DELETED_BY, t1.DOUBLE_VALUE, t1.ENTITY_ID, t1.ENTITY_VALUE, t1.INTEGER_VALUE, t1.STRING_VALUE, t1.UPDATE_TS, t1.UPDATED_BY, t1.VERSION, t1.CATEGORY_ATTR_ID, t0.ID, t0.CATEGORY_ENTITY_TYPE, t0.CODE, t0.CREATE_TS, t0.CREATED_BY, t0.DATA_TYPE, t0.DEFAULT_BOOLEAN, t0.DEFAULT_DATE, t0.DEFAULT_DATE_IS_CURRENT, t0.DEFAULT_DOUBLE, t0.DEFAULT_ENTITY_VALUE, t0.DEFAULT_INT, t0.DEFAULT_STRING, t0.DELETE_TS, t0.DELETED_BY, t0.ENTITY_CLASS, t0.ENUMERATION, t0.LOOKUP, t0.NAME, t0.ORDER_NO, t0.REQUIRED, t0.ROWS_COUNT, t0.SCREEN, t0.TARGET_SCREENS, t0.UPDATE_TS, t0.UPDATED_BY, t0.VERSION, t0.WIDTH, t0.CATEGORY_ID, t2.ID, t2.DISCRIMINATOR, t2.CREATE_TS, t2.CREATED_BY, t2.DELETE_TS, t2.DELETED_BY, t2.ENTITY_TYPE, t2.IS_DEFAULT, t2.NAME, t2.SPECIAL, t2.UPDATE_TS, t2.UPDATED_BY, t2.VERSION FROM SYS_ATTR_VALUE t1 LEFT OUTER JOIN SYS_CATEGORY_ATTR t0 ON (t0.ID = t1.CATEGORY_ATTR_ID) LEFT OUTER JOIN SYS_CATEGORY t2 ON (t2.ID = t0.CATEGORY_ID) WHERE ((t1.ENTITY_ID IN ?) AND (t1.DELETE_TS IS NULL))")
---
org.eclipse.persistence.exceptions.DatabaseException: 
Internal Exception: org.postgresql.util.PSQLException: ERROR: column t0.rows_count does not exist
  Position: 596
Error Code: 0
Call: SELECT t1.ID, t1.BOOLEAN_VALUE, t1.CODE, t1.CREATE_TS, t1.CREATED_BY, t1.DATE_VALUE, t1.DELETE_TS, t1.DELETED_BY, t1.DOUBLE_VALUE, t1.ENTITY_ID, t1.ENTITY_VALUE, t1.INTEGER_VALUE, t1.STRING_VALUE, t1.UPDATE_TS, t1.UPDATED_BY, t1.VERSION, t1.CATEGORY_ATTR_ID, t0.ID, t0.CATEGORY_ENTITY_TYPE, t0.CODE, t0.CREATE_TS, t0.CREATED_BY, t0.DATA_TYPE, t0.DEFAULT_BOOLEAN, t0.DEFAULT_DATE, t0.DEFAULT_DATE_IS_CURRENT, t0.DEFAULT_DOUBLE, t0.DEFAULT_ENTITY_VALUE, t0.DEFAULT_INT, t0.DEFAULT_STRING, t0.DELETE_TS, t0.DELETED_BY, t0.ENTITY_CLASS, t0.ENUMERATION, t0.LOOKUP, t0.NAME, t0.ORDER_NO, t0.REQUIRED, t0.ROWS_COUNT, t0.SCREEN, t0.TARGET_SCREENS, t0.UPDATE_TS, t0.UPDATED_BY, t0.VERSION, t0.WIDTH, t0.CATEGORY_ID, t2.ID, t2.DISCRIMINATOR, t2.CREATE_TS, t2.CREATED_BY, t2.DELETE_TS, t2.DELETED_BY, t2.ENTITY_TYPE, t2.IS_DEFAULT, t2.NAME, t2.SPECIAL, t2.UPDATE_TS, t2.UPDATED_BY, t2.VERSION FROM SYS_ATTR_VALUE t1 LEFT OUTER JOIN SYS_CATEGORY_ATTR t0 ON (t0.ID = t1.CATEGORY_ATTR_ID) LEFT OUTER JOIN SYS_CATEGORY t2 ON (t2.ID = t0.CATEGORY_ID) WHERE ((t1.ENTITY_ID IN (?)) AND (t1.DELETE_TS IS NULL))
	bind => [b9af0ef3-c1ed-9cbb-beae-ff347dfd83a0]
Query: ReadAllQuery(referenceClass=CategoryAttributeValue sql="SELECT t1.ID, t1.BOOLEAN_VALUE, t1.CODE, t1.CREATE_TS, t1.CREATED_BY, t1.DATE_VALUE, t1.DELETE_TS, t1.DELETED_BY, t1.DOUBLE_VALUE, t1.ENTITY_ID, t1.ENTITY_VALUE, t1.INTEGER_VALUE, t1.STRING_VALUE, t1.UPDATE_TS, t1.UPDATED_BY, t1.VERSION, t1.CATEGORY_ATTR_ID, t0.ID, t0.CATEGORY_ENTITY_TYPE, t0.CODE, t0.CREATE_TS, t0.CREATED_BY, t0.DATA_TYPE, t0.DEFAULT_BOOLEAN, t0.DEFAULT_DATE, t0.DEFAULT_DATE_IS_CURRENT, t0.DEFAULT_DOUBLE, t0.DEFAULT_ENTITY_VALUE, t0.DEFAULT_INT, t0.DEFAULT_STRING, t0.DELETE_TS, t0.DELETED_BY, t0.ENTITY_CLASS, t0.ENUMERATION, t0.LOOKUP, t0.NAME, t0.ORDER_NO, t0.REQUIRED, t0.ROWS_COUNT, t0.SCREEN, t0.TARGET_SCREENS, t0.UPDATE_TS, t0.UPDATED_BY, t0.VERSION, t0.WIDTH, t0.CATEGORY_ID, t2.ID, t2.DISCRIMINATOR, t2.CREATE_TS, t2.CREATED_BY, t2.DELETE_TS, t2.DELETED_BY, t2.ENTITY_TYPE, t2.IS_DEFAULT, t2.NAME, t2.SPECIAL, t2.UPDATE_TS, t2.UPDATED_BY, t2.VERSION FROM SYS_ATTR_VALUE t1 LEFT OUTER JOIN SYS_CATEGORY_ATTR t0 ON (t0.ID = t1.CATEGORY_ATTR_ID) LEFT OUTER JOIN SYS_CATEGORY t2 ON (t2.ID = t0.CATEGORY_ID) WHERE ((t1.ENTITY_ID IN ?) AND (t1.DELETE_TS IS NULL))")
---
org.postgresql.util.PSQLException: ERROR: column t0.rows_count does not exist
  Position: 596
	at com.haulmont.cuba.core.sys.ServiceInterceptor.aroundInvoke(ServiceInterceptor.java:83)
	at sun.reflect.GeneratedMethodAccessor122.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:620)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:609)
	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
	at com.sun.proxy.$Proxy85.load(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
	at com.sun.proxy.$Proxy183.load(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:212)
	at com.haulmont.cuba.core.sys.remoting.CubaRemoteInvocationExecutor.invoke(CubaRemoteInvocationExecutor.java:90)
	at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78)
	at org.springframework.remoting.support.RemoteInvocationBasedExporter.invokeAndCreateResult(RemoteInvocationBasedExporter.java:114)
	at com.haulmont.cuba.core.sys.remoting.HttpServiceExporter.handleRequest(HttpServiceExporter.java:77)
	at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
	at com.haulmont.cuba.core.sys.remoting.RemotingServlet.doService(RemotingServlet.java:148)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:870)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)
	at org.springframework.remoting.support.RemoteInvocationUtils.fillInClientStackTraceIfPossible(RemoteInvocationUtils.java:45)
	at org.springframework.remoting.support.RemoteInvocationResult.recreate(RemoteInvocationResult.java:149)
	at org.springframework.remoting.support.RemoteInvocationBasedAccessor.recreateRemoteInvocationResult(RemoteInvocationBasedAccessor.java:85)
	at com.haulmont.cuba.core.sys.remoting.HttpServiceProxy.recreateRemoteInvocationResult(HttpServiceProxy.java:50)
	at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.invoke(HttpInvokerClientInterceptor.java:150)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
	at com.sun.proxy.$Proxy22.load(Unknown Source)
	at com.haulmont.cuba.client.sys.DataManagerClientImpl.load(DataManagerClientImpl.java:46)
	at com.haulmont.cuba.client.sys.DataManagerClientImpl.reload(DataManagerClientImpl.java:86)
	at com.haulmont.cuba.client.sys.DataManagerClientImpl.reload(DataManagerClientImpl.java:73)
	at com.haulmont.cuba.gui.data.impl.GenericDataSupplier.reload(GenericDataSupplier.java:53)
	at com.haulmont.cuba.gui.components.EditorWindowDelegate.setItem(EditorWindowDelegate.java:140)
	at com.haulmont.cuba.web.gui.WebWindow$Editor.setItem(WebWindow.java:1365)
	at com.haulmont.cuba.gui.components.AbstractEditor.setItem(AbstractEditor.java:70)
	at com.haulmont.cuba.gui.WindowManager.openEditor(WindowManager.java:715)
	at com.haulmont.cuba.web.WebWindowManager.openEditor(WebWindowManager.java:143)
	at com.haulmont.cuba.gui.components.WindowDelegate.openEditor(WindowDelegate.java:250)
	at com.haulmont.cuba.web.gui.WebWindow.openEditor(WebWindow.java:466)
	at com.haulmont.cuba.gui.components.actions.EditAction.internalOpenEditor(EditAction.java:188)
	at com.haulmont.cuba.gui.components.actions.EditAction.actionPerform(EditAction.java:181)
	at com.haulmont.cuba.web.gui.components.WebAbstractTable.handleClickAction(WebAbstractTable.java:672)
	at com.haulmont.cuba.web.gui.components.WebAbstractTable.lambda$initComponent$4fd149ee$1(WebAbstractTable.java:564)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161)
	at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1030)
	at com.vaadin.ui.Table.handleClickEvent(Table.java:3219)
	at com.vaadin.ui.Table.changeVariables(Table.java:2995)
	at com.haulmont.cuba.web.toolkit.ui.CubaTable.changeVariables(CubaTable.java:217)
	at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:609)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:428)
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:274)
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:79)
	at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler.lambda$synchronizedHandleRequest$92(CubaVaadinServletService.java:307)
	at com.haulmont.cuba.web.sys.CubaVaadinServletService.withUserSession(CubaVaadinServletService.java:189)
	at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler.synchronizedHandleRequest(CubaVaadinServletService.java:307)
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1409)
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:369)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:254)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:163)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at com.haulmont.cuba.web.sys.CubaHttpFilter.handleNotFiltered(CubaHttpFilter.java:108)
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:95)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

Please always update your databases after version upgrades. We sometimes change something in the schema even in maintenance releases. In 6.2.5, there is a change in dynamic attributes.

Hi Konstantin,

As far as I can see, no new update DB scripts were generated as part of the upgrade (even though I explicitly told CUBA studio to perform a DB upgrade after changing to the new platform release - as I’ve been caught out by this before).

So as far as I can see there’s no schema changes recorded that my build process would then run against live.

Actually, there is a new script in this release: update/postgres/16/160616-addSizeCategoryAttribute.sql
If you want it to be automatically executed on your production database, check whether it is in your tomcat/webapps/app-core/WEB-INF/db/10-cuba folder and set cuba.automaticDatabaseUpdate property to true.