diff --git a/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresConfiguration.java b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresConfiguration.java
index e66e452..29e5d904 100644
--- a/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresConfiguration.java
+++ b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresConfiguration.java
@@ -256,7 +256,7 @@
                 databaseSchema.orElse(DATABASE_SCHEMA_DEFAULT_VALUE),
                 new Credential(username.get(), password.get()),
                 new Credential(byPassRLSUser.orElse(username.get()), byPassRLSPassword.orElse(password.get())),
-                rowLevelSecurityEnabled.orElse(false),
+                    rowLevelSecurityEnabled.filter(rlsEnabled -> rlsEnabled).map(rlsEnabled -> RowLevelSecurity.ENABLED).orElse(RowLevelSecurity.DISABLED),
                 poolInitialSize.orElse(POOL_INITIAL_SIZE_DEFAULT_VALUE),
                 poolMaxSize.orElse(POOL_MAX_SIZE_DEFAULT_VALUE),
                 byPassRLSPoolInitialSize.orElse(BY_PASS_RLS_POOL_INITIAL_SIZE_DEFAULT_VALUE),
@@ -297,7 +297,7 @@
     private final String databaseSchema;
     private final Credential defaultCredential;
     private final Credential byPassRLSCredential;
-    private final boolean rowLevelSecurityEnabled;
+    private final RowLevelSecurity rowLevelSecurity;
     private final Integer poolInitialSize;
     private final Integer poolMaxSize;
     private final Integer byPassRLSPoolInitialSize;
@@ -306,7 +306,7 @@
     private final Duration jooqReactiveTimeout;
 
     private PostgresConfiguration(String host, int port, String databaseName, String databaseSchema,
-                                  Credential defaultCredential, Credential byPassRLSCredential, boolean rowLevelSecurityEnabled,
+                                  Credential defaultCredential, Credential byPassRLSCredential, RowLevelSecurity rowLevelSecurity,
                                   Integer poolInitialSize, Integer poolMaxSize,
                                   Integer byPassRLSPoolInitialSize, Integer byPassRLSPoolMaxSize,
                                   SSLMode sslMode, Duration jooqReactiveTimeout) {
@@ -316,7 +316,7 @@
         this.databaseSchema = databaseSchema;
         this.defaultCredential = defaultCredential;
         this.byPassRLSCredential = byPassRLSCredential;
-        this.rowLevelSecurityEnabled = rowLevelSecurityEnabled;
+        this.rowLevelSecurity = rowLevelSecurity;
         this.poolInitialSize = poolInitialSize;
         this.poolMaxSize = poolMaxSize;
         this.byPassRLSPoolInitialSize = byPassRLSPoolInitialSize;
@@ -349,8 +349,8 @@
         return byPassRLSCredential;
     }
 
-    public boolean rowLevelSecurityEnabled() {
-        return rowLevelSecurityEnabled;
+    public RowLevelSecurity getRowLevelSecurity() {
+        return rowLevelSecurity;
     }
 
     public Integer poolInitialSize() {
@@ -379,7 +379,7 @@
 
     @Override
     public final int hashCode() {
-        return Objects.hash(host, port, databaseName, databaseSchema, defaultCredential, byPassRLSCredential, rowLevelSecurityEnabled, poolInitialSize, poolMaxSize, sslMode, jooqReactiveTimeout);
+        return Objects.hash(host, port, databaseName, databaseSchema, defaultCredential, byPassRLSCredential, rowLevelSecurity, poolInitialSize, poolMaxSize, sslMode, jooqReactiveTimeout);
     }
 
     @Override
@@ -387,7 +387,7 @@
         if (o instanceof PostgresConfiguration) {
             PostgresConfiguration that = (PostgresConfiguration) o;
 
-            return Objects.equals(this.rowLevelSecurityEnabled, that.rowLevelSecurityEnabled)
+            return Objects.equals(this.rowLevelSecurity, that.rowLevelSecurity)
                 && Objects.equals(this.host, that.host)
                 && Objects.equals(this.port, that.port)
                 && Objects.equals(this.defaultCredential, that.defaultCredential)
diff --git a/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresTable.java b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresTable.java
index 0333f6b..f9bd130 100644
--- a/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresTable.java
+++ b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresTable.java
@@ -60,7 +60,7 @@
             this.query = query;
         }
 
-        abstract boolean shouldBeApplied(boolean rowLevelSecurityEnabled);
+        abstract boolean shouldBeApplied(RowLevelSecurity rowLevelSecurity);
 
         public String getQuery() {
             return query;
@@ -73,8 +73,8 @@
         }
 
         @Override
-        boolean shouldBeApplied(boolean rowLevelSecurityEnabled) {
-            return rowLevelSecurityEnabled;
+        boolean shouldBeApplied(RowLevelSecurity rowLevelSecurity) {
+            return rowLevelSecurity.isRowLevelSecurityEnabled();
         }
     }
 
@@ -84,8 +84,8 @@
         }
 
         @Override
-        boolean shouldBeApplied(boolean rowLevelSecurityEnabled) {
-            return !rowLevelSecurityEnabled;
+        boolean shouldBeApplied(RowLevelSecurity rowLevelSecurity) {
+            return !rowLevelSecurity.isRowLevelSecurityEnabled();
         }
     }
 
@@ -95,7 +95,7 @@
         }
 
         @Override
-        boolean shouldBeApplied(boolean rowLevelSecurityEnabled) {
+        boolean shouldBeApplied(RowLevelSecurity rowLevelSecurity) {
             return true;
         }
     }
diff --git a/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresTableManager.java b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresTableManager.java
index 7df62d8..ffb8849 100644
--- a/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresTableManager.java
+++ b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresTableManager.java
@@ -43,7 +43,7 @@
     private static final Logger LOGGER = LoggerFactory.getLogger(PostgresTableManager.class);
     private final PostgresExecutor postgresExecutor;
     private final PostgresModule module;
-    private final boolean rowLevelSecurityEnabled;
+    private final RowLevelSecurity rowLevelSecurity;
 
     @Inject
     public PostgresTableManager(PostgresExecutor postgresExecutor,
@@ -51,14 +51,14 @@
                                 PostgresConfiguration postgresConfiguration) {
         this.postgresExecutor = postgresExecutor;
         this.module = module;
-        this.rowLevelSecurityEnabled = postgresConfiguration.rowLevelSecurityEnabled();
+        this.rowLevelSecurity = postgresConfiguration.getRowLevelSecurity();
     }
 
     @VisibleForTesting
-    public PostgresTableManager(PostgresExecutor postgresExecutor, PostgresModule module, boolean rowLevelSecurityEnabled) {
+    public PostgresTableManager(PostgresExecutor postgresExecutor, PostgresModule module, RowLevelSecurity rowLevelSecurity) {
         this.postgresExecutor = postgresExecutor;
         this.module = module;
-        this.rowLevelSecurityEnabled = rowLevelSecurityEnabled;
+        this.rowLevelSecurity = rowLevelSecurity;
     }
 
     public void initPostgres() {
@@ -123,7 +123,7 @@
 
     private Mono<Void> executeAdditionalAlterQueries(PostgresTable table, Connection connection) {
         return Flux.fromIterable(table.getAdditionalAlterQueries())
-            .filter(additionalAlterQuery -> additionalAlterQuery.shouldBeApplied(rowLevelSecurityEnabled))
+            .filter(additionalAlterQuery -> additionalAlterQuery.shouldBeApplied(rowLevelSecurity))
             .map(PostgresTable.AdditionalAlterQuery::getQuery)
             .concatMap(alterSQLQuery -> Mono.just(connection)
                 .flatMapMany(pgConnection -> pgConnection.createStatement(alterSQLQuery)
@@ -141,7 +141,7 @@
     }
 
     private Mono<Void> enableRLSIfNeeded(PostgresTable table, Connection connection) {
-        if (rowLevelSecurityEnabled && table.supportsRowLevelSecurity()) {
+        if (rowLevelSecurity.isRowLevelSecurityEnabled() && table.supportsRowLevelSecurity()) {
             return alterTableEnableRLS(table, connection);
         }
         return Mono.empty();
diff --git a/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/RowLevelSecurity.java b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/RowLevelSecurity.java
new file mode 100644
index 0000000..2f806b6
--- /dev/null
+++ b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/RowLevelSecurity.java
@@ -0,0 +1,35 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.backends.postgres;
+
+public enum RowLevelSecurity {
+    ENABLED(true),
+    DISABLED(false);
+
+    private boolean rowLevelSecurityEnabled;
+
+    RowLevelSecurity(boolean rowLevelSecurityEnabled) {
+        this.rowLevelSecurityEnabled = rowLevelSecurityEnabled;
+    }
+
+    public boolean isRowLevelSecurityEnabled() {
+        return rowLevelSecurityEnabled;
+    }
+}
diff --git a/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PoolBackedPostgresConnectionFactory.java b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PoolBackedPostgresConnectionFactory.java
index 02af49b..465f93a 100644
--- a/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PoolBackedPostgresConnectionFactory.java
+++ b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PoolBackedPostgresConnectionFactory.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.backends.postgres.utils;
 
+import org.apache.james.backends.postgres.RowLevelSecurity;
 import org.apache.james.core.Domain;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,11 +34,12 @@
     private static final Logger LOGGER = LoggerFactory.getLogger(PoolBackedPostgresConnectionFactory.class);
     private static final int DEFAULT_INITIAL_SIZE = 10;
     private static final int DEFAULT_MAX_SIZE = 20;
-    private final boolean rowLevelSecurityEnabled;
+
+    private final RowLevelSecurity rowLevelSecurity;
     private final ConnectionPool pool;
 
-    public PoolBackedPostgresConnectionFactory(boolean rowLevelSecurityEnabled, int initialSize, int maxSize, ConnectionFactory connectionFactory) {
-        this.rowLevelSecurityEnabled = rowLevelSecurityEnabled;
+    public PoolBackedPostgresConnectionFactory(RowLevelSecurity rowLevelSecurity, int initialSize, int maxSize, ConnectionFactory connectionFactory) {
+        this.rowLevelSecurity = rowLevelSecurity;
         ConnectionPoolConfiguration configuration = ConnectionPoolConfiguration.builder(connectionFactory)
             .initialSize(initialSize)
             .maxSize(maxSize)
@@ -46,13 +48,13 @@
         pool = new ConnectionPool(configuration);
     }
 
-    public PoolBackedPostgresConnectionFactory(boolean rowLevelSecurityEnabled, ConnectionFactory connectionFactory) {
-        this(rowLevelSecurityEnabled, DEFAULT_INITIAL_SIZE, DEFAULT_MAX_SIZE, connectionFactory);
+    public PoolBackedPostgresConnectionFactory(RowLevelSecurity rowLevelSecurity, ConnectionFactory connectionFactory) {
+        this(rowLevelSecurity, DEFAULT_INITIAL_SIZE, DEFAULT_MAX_SIZE, connectionFactory);
     }
 
     @Override
     public Mono<Connection> getConnection(Domain domain) {
-        if (rowLevelSecurityEnabled) {
+        if (rowLevelSecurity.isRowLevelSecurityEnabled()) {
             return pool.create().flatMap(connection -> setDomainAttributeForConnection(domain.asString(), connection));
         } else {
             return pool.create();
diff --git a/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PoolBackedPostgresConnectionFactoryTest.java b/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PoolBackedPostgresConnectionFactoryTest.java
index 31bd7af..4e4cb45 100644
--- a/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PoolBackedPostgresConnectionFactoryTest.java
+++ b/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PoolBackedPostgresConnectionFactoryTest.java
@@ -29,6 +29,6 @@
 
     @Override
     JamesPostgresConnectionFactory jamesPostgresConnectionFactory() {
-        return new PoolBackedPostgresConnectionFactory(true, postgresExtension.getConnectionFactory());
+        return new PoolBackedPostgresConnectionFactory(RowLevelSecurity.ENABLED, postgresExtension.getConnectionFactory());
     }
 }
diff --git a/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresConfigurationTest.java b/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresConfigurationTest.java
index 75cc505..08d76a2 100644
--- a/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresConfigurationTest.java
+++ b/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresConfigurationTest.java
@@ -51,7 +51,7 @@
         assertThat(configuration.getDefaultCredential().getPassword()).isEqualTo("1");
         assertThat(configuration.getByPassRLSCredential().getUsername()).isEqualTo("bypassrlsjames");
         assertThat(configuration.getByPassRLSCredential().getPassword()).isEqualTo("2");
-        assertThat(configuration.rowLevelSecurityEnabled()).isEqualTo(true);
+        assertThat(configuration.getRowLevelSecurity()).isEqualTo(RowLevelSecurity.ENABLED);
         assertThat(configuration.getSslMode()).isEqualTo(SSLMode.REQUIRE);
     }
 
@@ -68,7 +68,7 @@
         assertThat(configuration.getDatabaseSchema()).isEqualTo(PostgresConfiguration.DATABASE_SCHEMA_DEFAULT_VALUE);
         assertThat(configuration.getByPassRLSCredential().getUsername()).isEqualTo("james");
         assertThat(configuration.getByPassRLSCredential().getPassword()).isEqualTo("1");
-        assertThat(configuration.rowLevelSecurityEnabled()).isEqualTo(false);
+        assertThat(configuration.getRowLevelSecurity()).isEqualTo(RowLevelSecurity.DISABLED);
         assertThat(configuration.getSslMode()).isEqualTo(SSLMode.ALLOW);
     }
 
diff --git a/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresExtension.java b/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresExtension.java
index e527ee1..dc30474 100644
--- a/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresExtension.java
+++ b/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresExtension.java
@@ -70,10 +70,8 @@
         }
     }
 
-    private static final boolean ROW_LEVEL_SECURITY_ENABLED = true;
-
     public static PostgresExtension withRowLevelSecurity(PostgresModule module) {
-        return new PostgresExtension(module, ROW_LEVEL_SECURITY_ENABLED);
+        return new PostgresExtension(module, RowLevelSecurity.ENABLED);
     }
 
     public static PostgresExtension withoutRowLevelSecurity(PostgresModule module) {
@@ -81,7 +79,7 @@
     }
 
     public static PostgresExtension withoutRowLevelSecurity(PostgresModule module, PoolSize poolSize) {
-        return new PostgresExtension(module, !ROW_LEVEL_SECURITY_ENABLED, Optional.of(poolSize));
+        return new PostgresExtension(module, RowLevelSecurity.DISABLED, Optional.of(poolSize));
     }
 
     public static PostgresExtension empty() {
@@ -91,7 +89,7 @@
     public static final PoolSize DEFAULT_POOL_SIZE = PoolSize.SMALL;
     public static PostgreSQLContainer<?> PG_CONTAINER = DockerPostgresSingleton.SINGLETON;
     private final PostgresModule postgresModule;
-    private final boolean rlsEnabled;
+    private final RowLevelSecurity rowLevelSecurity;
     private final PostgresFixture.Database selectedDatabase;
     private PoolSize poolSize;
     private PostgresConfiguration postgresConfiguration;
@@ -112,14 +110,14 @@
             .exec();
     }
 
-    private PostgresExtension(PostgresModule postgresModule, boolean rlsEnabled) {
-        this(postgresModule, rlsEnabled, Optional.empty());
+    private PostgresExtension(PostgresModule postgresModule, RowLevelSecurity rowLevelSecurity) {
+        this(postgresModule, rowLevelSecurity, Optional.empty());
     }
 
-    private PostgresExtension(PostgresModule postgresModule, boolean rlsEnabled, Optional<PoolSize> maybePoolSize) {
+    private PostgresExtension(PostgresModule postgresModule, RowLevelSecurity rowLevelSecurity, Optional<PoolSize> maybePoolSize) {
         this.postgresModule = postgresModule;
-        this.rlsEnabled = rlsEnabled;
-        if (rlsEnabled) {
+        this.rowLevelSecurity = rowLevelSecurity;
+        if (rowLevelSecurity.isRowLevelSecurityEnabled()) {
             this.selectedDatabase = PostgresFixture.Database.ROW_LEVEL_SECURITY_DATABASE;
         } else {
             this.selectedDatabase = DEFAULT_DATABASE;
@@ -138,7 +136,7 @@
     }
 
     private void querySettingRowLevelSecurityIfNeed() {
-        if (rlsEnabled) {
+        if (rowLevelSecurity.isRowLevelSecurityEnabled()) {
             Throwing.runnable(() -> {
                 PG_CONTAINER.execInContainer("psql", "-U", DEFAULT_DATABASE.dbUser(), "-c", "create user " + ROW_LEVEL_SECURITY_DATABASE.dbUser() + " WITH PASSWORD '" + ROW_LEVEL_SECURITY_DATABASE.dbPassword() + "';");
                 PG_CONTAINER.execInContainer("psql", "-U", DEFAULT_DATABASE.dbUser(), "-c", "create database " + ROW_LEVEL_SECURITY_DATABASE.dbName() + ";");
@@ -162,7 +160,7 @@
             .password(selectedDatabase.dbPassword())
             .byPassRLSUser(DEFAULT_DATABASE.dbUser())
             .byPassRLSPassword(DEFAULT_DATABASE.dbPassword())
-            .rowLevelSecurityEnabled(rlsEnabled)
+            .rowLevelSecurityEnabled(rowLevelSecurity.isRowLevelSecurityEnabled())
             .jooqReactiveTimeout(Optional.of(Duration.ofSeconds(20L)))
             .build();
 
@@ -181,7 +179,7 @@
         connectionFactory = new PostgresqlConnectionFactory(postgresqlConnectionConfigurationFunction.apply(postgresConfiguration.getDefaultCredential()));
         defaultConnection = connectionFactory.create().block();
         executorFactory = new PostgresExecutor.Factory(
-            getJamesPostgresConnectionFactory(rlsEnabled, connectionFactory),
+            getJamesPostgresConnectionFactory(rowLevelSecurity, connectionFactory),
             postgresConfiguration,
             metricFactory);
 
@@ -190,12 +188,12 @@
         PostgresqlConnectionFactory byPassRLSConnectionFactory = new PostgresqlConnectionFactory(postgresqlConnectionConfigurationFunction.apply(postgresConfiguration.getByPassRLSCredential()));
 
         byPassRLSPostgresExecutor = new PostgresExecutor.Factory(
-            getJamesPostgresConnectionFactory(false, byPassRLSConnectionFactory),
+            getJamesPostgresConnectionFactory(RowLevelSecurity.DISABLED, byPassRLSConnectionFactory),
             postgresConfiguration,
             metricFactory)
             .create();
 
-        this.postgresTableManager = new PostgresTableManager(defaultPostgresExecutor, postgresModule, rlsEnabled);
+        this.postgresTableManager = new PostgresTableManager(defaultPostgresExecutor, postgresModule, rowLevelSecurity);
     }
 
     @Override
@@ -284,9 +282,9 @@
             .block();
     }
 
-    private JamesPostgresConnectionFactory getJamesPostgresConnectionFactory(boolean rlsEnabled, PostgresqlConnectionFactory connectionFactory) {
+    private JamesPostgresConnectionFactory getJamesPostgresConnectionFactory(RowLevelSecurity rowLevelSecurity, PostgresqlConnectionFactory connectionFactory) {
         return new PoolBackedPostgresConnectionFactory(
-            rlsEnabled,
+            rowLevelSecurity,
             poolSize.getMin(),
             poolSize.getMax(),
             connectionFactory);
diff --git a/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresTableManagerTest.java b/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresTableManagerTest.java
index 9515422..2980885 100644
--- a/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresTableManagerTest.java
+++ b/backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresTableManagerTest.java
@@ -41,7 +41,7 @@
     static PostgresExtension postgresExtension = PostgresExtension.withRowLevelSecurity(PostgresModule.EMPTY_MODULE);
 
     Function<PostgresModule, PostgresTableManager> tableManagerFactory =
-        module -> new PostgresTableManager(postgresExtension.getDefaultPostgresExecutor(), module, true);
+        module -> new PostgresTableManager(postgresExtension.getDefaultPostgresExecutor(), module, RowLevelSecurity.ENABLED);
 
     @Test
     void initializeTableShouldSuccessWhenModuleHasSingleTable() {
@@ -340,10 +340,7 @@
             .build();
 
         PostgresModule module = PostgresModule.table(table);
-        boolean disabledRLS = false;
-
-
-        PostgresTableManager testee = new PostgresTableManager(postgresExtension.getDefaultPostgresExecutor(), module, disabledRLS);
+        PostgresTableManager testee = new PostgresTableManager(postgresExtension.getDefaultPostgresExecutor(), module, RowLevelSecurity.DISABLED);
 
         testee.initializeTables()
             .block();
@@ -383,7 +380,7 @@
             .addAdditionalAlterQueries("ALTER TABLE tbn1 ADD CONSTRAINT " + constraintName + " EXCLUDE (clm2 WITH =)")
             .build();
         PostgresModule module = PostgresModule.table(table);
-        PostgresTableManager testee = new PostgresTableManager(postgresExtension.getDefaultPostgresExecutor(), module, false);
+        PostgresTableManager testee = new PostgresTableManager(postgresExtension.getDefaultPostgresExecutor(), module, RowLevelSecurity.DISABLED);
 
         testee.initializeTables().block();
 
@@ -409,7 +406,7 @@
             .addAdditionalAlterQueries(new PostgresTable.NonRLSOnlyAdditionalAlterQuery("ALTER TABLE tbn1 ADD CONSTRAINT " + constraintName + " EXCLUDE (clm2 WITH =)"))
             .build();
         PostgresModule module = PostgresModule.table(table);
-        PostgresTableManager testee = new PostgresTableManager(postgresExtension.getPostgresExecutor(), module, false);
+        PostgresTableManager testee = new PostgresTableManager(postgresExtension.getDefaultPostgresExecutor(), module, RowLevelSecurity.DISABLED);
 
         testee.initializeTables().block();
 
@@ -435,7 +432,7 @@
             .addAdditionalAlterQueries(new PostgresTable.NonRLSOnlyAdditionalAlterQuery("ALTER TABLE tbn1 ADD CONSTRAINT " + constraintName + " EXCLUDE (clm2 WITH =)"))
             .build();
         PostgresModule module = PostgresModule.table(table);
-        PostgresTableManager testee = new PostgresTableManager(postgresExtension.getPostgresExecutor(), module, true);
+        PostgresTableManager testee = new PostgresTableManager(postgresExtension.getDefaultPostgresExecutor(), module, RowLevelSecurity.ENABLED);
 
         testee.initializeTables().block();
 
@@ -461,7 +458,7 @@
             .addAdditionalAlterQueries("ALTER TABLE tbn1 ADD CONSTRAINT " + constraintName + " EXCLUDE (clm2 WITH =)")
             .build();
         PostgresModule module = PostgresModule.table(table);
-        PostgresTableManager testee = new PostgresTableManager(postgresExtension.getDefaultPostgresExecutor(), module, false);
+        PostgresTableManager testee = new PostgresTableManager(postgresExtension.getDefaultPostgresExecutor(), module, RowLevelSecurity.DISABLED);
 
         testee.initializeTables().block();
 
diff --git a/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxSessionMapperFactory.java b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxSessionMapperFactory.java
index 5a5035f..8e157c5 100644
--- a/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxSessionMapperFactory.java
+++ b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxSessionMapperFactory.java
@@ -23,6 +23,7 @@
 import jakarta.inject.Inject;
 
 import org.apache.james.backends.postgres.PostgresConfiguration;
+import org.apache.james.backends.postgres.RowLevelSecurity;
 import org.apache.james.backends.postgres.utils.PostgresExecutor;
 import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.api.BlobStore;
@@ -60,7 +61,7 @@
     private final BlobStore blobStore;
     private final BlobId.Factory blobIdFactory;
     private final Clock clock;
-    private final boolean isRLSEnabled;
+    private final RowLevelSecurity rowLevelSecurity;
 
     @Inject
     public PostgresMailboxSessionMapperFactory(PostgresExecutor.Factory executorFactory,
@@ -72,13 +73,13 @@
         this.blobStore = blobStore;
         this.blobIdFactory = blobIdFactory;
         this.clock = clock;
-        this.isRLSEnabled = postgresConfiguration.rowLevelSecurityEnabled();
+        this.rowLevelSecurity = postgresConfiguration.getRowLevelSecurity();
     }
 
     @Override
     public MailboxMapper createMailboxMapper(MailboxSession session) {
         PostgresMailboxDAO mailboxDAO = new PostgresMailboxDAO(executorFactory.create(session.getUser().getDomainPart()));
-        if (isRLSEnabled) {
+        if (rowLevelSecurity.isRowLevelSecurityEnabled()) {
             return new RLSSupportPostgresMailboxMapper(mailboxDAO,
                 new PostgresMailboxMemberDAO(executorFactory.create(session.getUser().getDomainPart())));
         } else {
diff --git a/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/RLSSupportPostgresMailboxMapperACLTest.java b/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/RLSSupportPostgresMailboxMapperACLTest.java
index b42bc21..1352f0b 100644
--- a/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/RLSSupportPostgresMailboxMapperACLTest.java
+++ b/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/RLSSupportPostgresMailboxMapperACLTest.java
@@ -33,7 +33,7 @@
 
     @Override
     protected MailboxMapper createMailboxMapper() {
-        return new RLSSupportPostgresMailboxMapper(new PostgresMailboxDAO(postgresExtension.getPostgresExecutor()),
-            new PostgresMailboxMemberDAO(postgresExtension.getPostgresExecutor()));
+        return new RLSSupportPostgresMailboxMapper(new PostgresMailboxDAO(postgresExtension.getDefaultPostgresExecutor()),
+            new PostgresMailboxMemberDAO(postgresExtension.getDefaultPostgresExecutor()));
     }
 }
diff --git a/server/apps/postgres-app/src/main/java/org/apache/james/PostgresJamesConfiguration.java b/server/apps/postgres-app/src/main/java/org/apache/james/PostgresJamesConfiguration.java
index ba5e585..21b9c63 100644
--- a/server/apps/postgres-app/src/main/java/org/apache/james/PostgresJamesConfiguration.java
+++ b/server/apps/postgres-app/src/main/java/org/apache/james/PostgresJamesConfiguration.java
@@ -230,7 +230,9 @@
 
         private boolean readRLSEnabledFromFile(PropertiesProvider propertiesProvider) {
             try {
-                return PostgresConfiguration.from(propertiesProvider.getConfiguration(PostgresConfiguration.POSTGRES_CONFIGURATION_NAME)).rowLevelSecurityEnabled();
+                return PostgresConfiguration.from(propertiesProvider.getConfiguration(PostgresConfiguration.POSTGRES_CONFIGURATION_NAME))
+                    .getRowLevelSecurity()
+                    .isRowLevelSecurityEnabled();
             } catch (FileNotFoundException | ConfigurationException e) {
                 return false;
             }
diff --git a/server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresCommonModule.java b/server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresCommonModule.java
index c2b87b7..c9c51a7 100644
--- a/server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresCommonModule.java
+++ b/server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresCommonModule.java
@@ -28,6 +28,7 @@
 import org.apache.james.backends.postgres.PostgresConfiguration;
 import org.apache.james.backends.postgres.PostgresModule;
 import org.apache.james.backends.postgres.PostgresTableManager;
+import org.apache.james.backends.postgres.RowLevelSecurity;
 import org.apache.james.backends.postgres.utils.JamesPostgresConnectionFactory;
 import org.apache.james.backends.postgres.utils.PoolBackedPostgresConnectionFactory;
 import org.apache.james.backends.postgres.utils.PostgresConnectionClosure;
@@ -55,7 +56,6 @@
 
 public class PostgresCommonModule extends AbstractModule {
     private static final Logger LOGGER = LoggerFactory.getLogger("POSTGRES");
-    private static final boolean DISABLED_ROW_LEVEL_SECURITY = false;
 
     @Override
     public void configure() {
@@ -78,7 +78,7 @@
     @Singleton
     JamesPostgresConnectionFactory provideJamesPostgresConnectionFactory(PostgresConfiguration postgresConfiguration,
                                                                          ConnectionFactory connectionFactory) {
-        return new PoolBackedPostgresConnectionFactory(postgresConfiguration.rowLevelSecurityEnabled(),
+        return new PoolBackedPostgresConnectionFactory(postgresConfiguration.getRowLevelSecurity(),
             postgresConfiguration.poolInitialSize(),
             postgresConfiguration.poolMaxSize(),
             connectionFactory);
@@ -90,10 +90,10 @@
     JamesPostgresConnectionFactory provideJamesPostgresConnectionFactoryWithRLSBypass(PostgresConfiguration postgresConfiguration,
                                                                                       JamesPostgresConnectionFactory jamesPostgresConnectionFactory,
                                                                                       @Named(JamesPostgresConnectionFactory.BY_PASS_RLS_INJECT) ConnectionFactory connectionFactory) {
-        if (!postgresConfiguration.rowLevelSecurityEnabled()) {
+        if (!postgresConfiguration.getRowLevelSecurity().isRowLevelSecurityEnabled()) {
             return jamesPostgresConnectionFactory;
         }
-        return new PoolBackedPostgresConnectionFactory(DISABLED_ROW_LEVEL_SECURITY,
+        return new PoolBackedPostgresConnectionFactory(RowLevelSecurity.DISABLED,
             postgresConfiguration.byPassRLSPoolInitialSize(),
             postgresConfiguration.byPassRLSPoolMaxSize(),
             connectionFactory);
