Clearing all postgres tables for tests
June 12, 2025
Have you written acceptance tests or integrations tests in Java/Kotlin using Testcontainers Postgresql, and you reuse the container across tests to save time? Then you likely want to clear the database to avoid contamination between tests.
Here is a small code snippet to clear postgres tables (except flyway migrations). It uses Jdbi to execute the SQL.
jdbi.useHandle<Exception> { handle ->
handle.execute(
"""DO ${'$'}${'$'}DECLARE tablename TEXT;
BEGIN
FOR tablename IN (SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_type = 'BASE TABLE'
AND table_catalog = '${testDatabaseName}'
AND table_name not like 'flyway%')
LOOP
EXECUTE 'TRUNCATE TABLE ' || tablename || ' RESTART IDENTITY CASCADE;';
END LOOP;
END${'$'}${'$'};""",
)
}
Put this in a function like fun clearAllData() { ... }
, and run it in Junit's beforeEach
or afterEach
.