WSO2IS 默认数据库模式中的列长度限制太小
Column length limits are too small in WSO2IS default database schema
我正在使用 TenantMgtAdminService https://is.docs.wso2.com/en/latest/develop/managing-tenants-with-apis/ 将租户添加到我的本地 WSO2IS 服务器(带 postgresql 的 5.10.0 版)。我注意到在将 wso2is-admin@foodcompanyad123.com(这是一个有效但超过 31 个字符的电子邮件地址)设置为 tenantInfoBean.admin.
时服务器中抛出了以下异常
Caused by: java.sql.BatchUpdateException: Batch entry 5 INSERT INTO REG_LOG (REG_PATH, REG_USER_ID, REG_LOGGED_TIME, REG_ACTION, REG_ACTION_DATA, REG_TENANT_ID) VALUES ('/_system/governance/permission', 'wso2is-admin@foodcompanyad123.com', '2020-06-17 13:54:15.776+03', 0, NULL, 9) was aborted: ERROR: value too long for type character varying(31) Call getNextException to see other errors in the batch.
at org.postgresql.jdbc.BatchResultHandler.handleError(BatchResultHandler.java:154)
at org.postgresql.core.ResultHandlerDelegate.handleError(ResultHandlerDelegate.java:50)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2269)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:511)
at org.postgresql.jdbc.PgStatement.internalExecuteBatch(PgStatement.java:851)
at org.postgresql.jdbc.PgStatement.executeBatch(PgStatement.java:874)
at org.postgresql.jdbc.PgPreparedStatement.executeBatch(PgPreparedStatement.java:1569)
at sun.reflect.GeneratedMethodAccessor176.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114)
at com.sun.proxy.$Proxy53.executeBatch(Unknown Source)
at org.wso2.carbon.registry.core.jdbc.dao.JDBCLogsDAO.addLogRecords(JDBCLogsDAO.java:159)
... 3 more
Caused by: org.postgresql.util.PSQLException: ERROR: value too long for type character varying(31)
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2533)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2268)
... 13 more
如果管理员用户名的长度加上“@”符号加上租户域(例如 wso2is-admin@foodcompanyad123.com@foodcompanyad123.com,则 addTenant() 调用也会产生以下异常) 大于 45 个字符,如以下堆栈跟踪所示。
TID: [-1234] [TenantMgtAdminService] [2020-06-17 14:26:25,843] [9a69c7e4-661f-4713-b500-9f7e850f5c0d] ERROR {org.wso2.carbon.identity.workflow.impl.listener.WorkflowImplTenantMgtListener} - Error occurred while adding default bps profile for tenant: gondor-pizza-4.fts org.wso2.carbon.identity.workflow.impl.WorkflowImplException: Error when executing the sql query INSERT INTO WF_BPS_PROFILE(PROFILE_NAME, HOST_URL_MANAGER, HOST_URL_WORKER, USERNAME, PASSWORD, TENANT_ID) VALUES (?, ?, ?, ?, ?, ?)
at org.wso2.carbon.identity.workflow.impl.dao.BPSProfileDAO.addProfile(BPSProfileDAO.java:75)
at org.wso2.carbon.identity.workflow.impl.WorkflowImplServiceImpl.addBPSProfile(WorkflowImplServiceImpl.java:89)
...
...
...
Caused by: org.postgresql.util.PSQLException: ERROR: value too long for type character varying(45)
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2533)
与上面的第二个跟踪相关,我发现这个问题 https://github.com/wso2/product-is/issues/5460 仍然未解决。
解决这些问题的最佳方法是什么?我是否必须修改架构以增加限制?还有其他办法吗?
您应该能够增加有问题的列长度而不会出现功能问题。然而,增加列长度超过给定的默认值将导致轻微的性能下降,因为列上的索引大小也会增加。
然而,这种退化在功能强大的基础设施上几乎不会引起注意。
最好在增加列长度后测试您的关键功能,对于任何有问题的列。
我正在使用 TenantMgtAdminService https://is.docs.wso2.com/en/latest/develop/managing-tenants-with-apis/ 将租户添加到我的本地 WSO2IS 服务器(带 postgresql 的 5.10.0 版)。我注意到在将 wso2is-admin@foodcompanyad123.com(这是一个有效但超过 31 个字符的电子邮件地址)设置为 tenantInfoBean.admin.
时服务器中抛出了以下异常Caused by: java.sql.BatchUpdateException: Batch entry 5 INSERT INTO REG_LOG (REG_PATH, REG_USER_ID, REG_LOGGED_TIME, REG_ACTION, REG_ACTION_DATA, REG_TENANT_ID) VALUES ('/_system/governance/permission', 'wso2is-admin@foodcompanyad123.com', '2020-06-17 13:54:15.776+03', 0, NULL, 9) was aborted: ERROR: value too long for type character varying(31) Call getNextException to see other errors in the batch.
at org.postgresql.jdbc.BatchResultHandler.handleError(BatchResultHandler.java:154)
at org.postgresql.core.ResultHandlerDelegate.handleError(ResultHandlerDelegate.java:50)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2269)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:511)
at org.postgresql.jdbc.PgStatement.internalExecuteBatch(PgStatement.java:851)
at org.postgresql.jdbc.PgStatement.executeBatch(PgStatement.java:874)
at org.postgresql.jdbc.PgPreparedStatement.executeBatch(PgPreparedStatement.java:1569)
at sun.reflect.GeneratedMethodAccessor176.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114)
at com.sun.proxy.$Proxy53.executeBatch(Unknown Source)
at org.wso2.carbon.registry.core.jdbc.dao.JDBCLogsDAO.addLogRecords(JDBCLogsDAO.java:159)
... 3 more
Caused by: org.postgresql.util.PSQLException: ERROR: value too long for type character varying(31)
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2533)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2268)
... 13 more
如果管理员用户名的长度加上“@”符号加上租户域(例如 wso2is-admin@foodcompanyad123.com@foodcompanyad123.com,则 addTenant() 调用也会产生以下异常) 大于 45 个字符,如以下堆栈跟踪所示。
TID: [-1234] [TenantMgtAdminService] [2020-06-17 14:26:25,843] [9a69c7e4-661f-4713-b500-9f7e850f5c0d] ERROR {org.wso2.carbon.identity.workflow.impl.listener.WorkflowImplTenantMgtListener} - Error occurred while adding default bps profile for tenant: gondor-pizza-4.fts org.wso2.carbon.identity.workflow.impl.WorkflowImplException: Error when executing the sql query INSERT INTO WF_BPS_PROFILE(PROFILE_NAME, HOST_URL_MANAGER, HOST_URL_WORKER, USERNAME, PASSWORD, TENANT_ID) VALUES (?, ?, ?, ?, ?, ?)
at org.wso2.carbon.identity.workflow.impl.dao.BPSProfileDAO.addProfile(BPSProfileDAO.java:75)
at org.wso2.carbon.identity.workflow.impl.WorkflowImplServiceImpl.addBPSProfile(WorkflowImplServiceImpl.java:89)
...
...
...
Caused by: org.postgresql.util.PSQLException: ERROR: value too long for type character varying(45)
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2533)
与上面的第二个跟踪相关,我发现这个问题 https://github.com/wso2/product-is/issues/5460 仍然未解决。
解决这些问题的最佳方法是什么?我是否必须修改架构以增加限制?还有其他办法吗?
您应该能够增加有问题的列长度而不会出现功能问题。然而,增加列长度超过给定的默认值将导致轻微的性能下降,因为列上的索引大小也会增加。
然而,这种退化在功能强大的基础设施上几乎不会引起注意。
最好在增加列长度后测试您的关键功能,对于任何有问题的列。