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) {

Reply via email to