繁体   English   中英

如何检查 PostgreSQL 逻辑复制槽是否已经存在于 java?

[英]How to check if a PostgreSQL logical replication slot already exists with java?

我正在使用 PostgreSQL 复制 API 创建一个带有 Java 代码的逻辑复制槽,我想在创建过程之前添加一个测试以检查该槽是否已经存在。 这是我的代码:

connection.getReplicationAPI()
.createReplicationSlot()
.logical()
.withSlotName(slotName)
.withOutputPlugin("test_decoding")
.make();
SELECT
  slot_name,
  plugin,
  slot_type,
  datoid,
  database,
  temporary,
  active,
  active_pid,
  xmin,
  catalog_xmin,
  restart_lsn,
  confirmed_flush_lsn
FROM pg_replication_slots
WHERE slot_name = ?

我想你可以通过以下方式检查它:

    log.info("creating replication slot, slotName={}", slotName);
try {
  connection.getReplicationAPI()
      .createReplicationSlot()
      .logical()
      .withSlotName(slotName)
      .withOutputPlugin("test_decoding")
      .make();
  log.info("replication slot created");
} catch (Exception e) {
  if (e.getMessage()
      .equals("ERROR: replication slot \"" + slotName
          + "\" already exists")) {
    log.info("replication slot exists, not creating");
  } else {
    log.error("error creating replication slot", e);
    throw new RuntimeException(e);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM