Class PostgresReplicationAdmin

java.lang.Object
br.com.vantroba.bi.transporte.powersync.PostgresReplicationAdmin

@Singleton public class PostgresReplicationAdmin extends Object
Operações administrativas em slots de replicação lógica do PostgreSQL.

Por que @Connectable e não @Transactional: as funções pg_drop_replication_slot() e pg_create_logical_replication_slot() não podem rodar dentro de um transaction block — Postgres lança "... cannot run inside a transaction block". Por isso a conexão é aberta sem BEGIN, com autoCommit=true; cada comando vira sua própria transação implícita.

Não-atomicidade aceita: se um dos passos do resetSlot(String, String) falhar no meio (ex.: drop sucesso, create falha), o slot fica em estado parcial. O operador rerroda o reset ou usa psql pra recriar o slot manualmente (ver docs/resetar-powersync.md).

  • Constructor Details

    • PostgresReplicationAdmin

      public PostgresReplicationAdmin(io.micronaut.data.connection.ConnectionOperations<Connection> connectionOperations)
      Cria o admin com as operações de conexão JDBC do Micronaut Data.
      Parameters:
      connectionOperations - fonte de conexões JDBC usada pelos comandos @Connectable
  • Method Details

    • currentLsn

      public Optional<String> currentLsn(String slotName)
      Captura o LSN atual confirmado do slot (read-only).
      Parameters:
      slotName - nome do slot de replicação lógica a consultar
      Returns:
      LSN como string (formato Postgres: 0/1A2B3C4D), ou Optional.empty() se o slot não existe.
    • resetSlot

      public PostgresReplicationAdmin.ResetSlotResult resetSlot(String slotName, String plugin)
      Termina backend ativo no slot (se houver), drop e cria slot novo.

      Sem block transacional (ver classe javadoc). Cada comando é executado em sua própria transação implícita; falha em qualquer ponto deixa estado parcial.

      Parameters:
      slotName - nome do slot de replicação lógica a resetar
      plugin - plugin de output usado na criação do slot (ex.: pgoutput)
      Returns:
      resultado com PID terminado (se aplicável), LSN antes e depois.