Drop temp table when transaction finishes 70/133570/1
authordanielhanrahan <daniel.hanrahan@est.tech>
Thu, 2 Mar 2023 23:27:09 +0000 (23:27 +0000)
committerDaniel Hanrahan <daniel.hanrahan@est.tech>
Tue, 7 Mar 2023 15:15:20 +0000 (15:15 +0000)
By default, temp tables are persisted until the end of the session.
This causes "Out of shared memory" errors in the database, which then
auto-vacuums the orphaned temp tables to free memory. To fix this, we
drop temp tables when the transaction finishes, using ON COMMIT DROP.

Issue-ID: CPS-1533
Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech>
Change-Id: Iac47d85e9621531a4a95b99c4becc8cc95242721

cps-ri/src/main/java/org/onap/cps/spi/repository/TempTableCreator.java

index 338b0b1..d798932 100644 (file)
@@ -60,6 +60,7 @@ public class TempTableCreator {
         final StringBuilder sqlStringBuilder = new StringBuilder("CREATE TEMPORARY TABLE ");
         sqlStringBuilder.append(tempTableName);
         defineColumns(sqlStringBuilder, columnNames);
+        sqlStringBuilder.append(" ON COMMIT DROP;");
         insertData(sqlStringBuilder, tempTableName, columnNames, sqlData);
         entityManager.createNativeQuery(sqlStringBuilder.toString()).executeUpdate();
         return tempTableName;
@@ -95,7 +96,7 @@ public class TempTableCreator {
                 sqlStringBuilder.append(",");
             }
         }
-        sqlStringBuilder.append(");");
+        sqlStringBuilder.append(")");
     }
 
     private static void insertData(final StringBuilder sqlStringBuilder,