This is an automated email from the ASF dual-hosted git repository. yuqi4733 pushed a commit to branch feat/cache-jcasbin-id-mapping in repository https://gitbox.apache.org/repos/asf/gravitino.git
commit f68982d9e6e3b1cb817d62165ce3a877a0367c5b Author: yuqi <[email protected]> AuthorDate: Fri Apr 17 14:28:44 2026 +0800 fix(cache): use subquery for PostgreSQL DELETE with LIMIT in entity_change_log pruning PostgreSQL does not support DELETE ... LIMIT syntax. Override pruneOldEntityChanges in EntityChangeLogPostgreSQLProvider to use DELETE ... WHERE id IN (SELECT id ... LIMIT 1000) instead. Co-Authored-By: Claude Opus 4.6 <[email protected]> --- .../mapper/EntityChangeLogSQLProviderFactory.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/EntityChangeLogSQLProviderFactory.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/EntityChangeLogSQLProviderFactory.java index 23ef776f5b..a23c2802c0 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/EntityChangeLogSQLProviderFactory.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/EntityChangeLogSQLProviderFactory.java @@ -18,6 +18,8 @@ */ package org.apache.gravitino.storage.relational.mapper; +import static org.apache.gravitino.storage.relational.mapper.EntityChangeLogMapper.ENTITY_CHANGE_LOG_TABLE_NAME; + import com.google.common.collect.ImmutableMap; import java.util.Map; import org.apache.gravitino.storage.relational.JDBCBackend.JDBCBackendType; @@ -48,7 +50,16 @@ public class EntityChangeLogSQLProviderFactory { static class EntityChangeLogH2Provider extends EntityChangeLogBaseSQLProvider {} - static class EntityChangeLogPostgreSQLProvider extends EntityChangeLogBaseSQLProvider {} + static class EntityChangeLogPostgreSQLProvider extends EntityChangeLogBaseSQLProvider { + @Override + public String pruneOldEntityChanges(@Param("before") long before) { + return "DELETE FROM " + + ENTITY_CHANGE_LOG_TABLE_NAME + + " WHERE id IN (SELECT id FROM " + + ENTITY_CHANGE_LOG_TABLE_NAME + + " WHERE created_at < #{before} LIMIT 1000)"; + } + } public static String selectEntityChanges( @Param("createdAtAfter") long createdAtAfter, @Param("maxRows") int maxRows) {
