Postgresql:如果插槽存在,则使用 create_slot=false 创建订阅

Postgresql: create subscription with create_slot=false if slot exists

我在 ECS/Fargate 上有多个带有 Postgresql 逻辑副本数据库 运行 的容器。我想问问是否有人知道是否有可能创建这样的订阅(非常伪代码):

IF REPLICATION SLOT my_subscription EXISTS:
    CREATE SUBSCRIPTION my_subscription CONNECTION [...]
    WITH (create_slot=false);
ELSE:
    CREATE SUBSCRIPTION my_subscription CONNECTION [...]
    WITH (create_slot=true);

这对启动和/或重新启动数据库容器非常有帮助。

编辑:订阅在 Docker 个容器的 init.sql 中,因此订阅是在每个容器启动时创建的。

您可以使用 DO 语句并捕获错误:

DO
$$BEGIN
   CREATE SUBSCRIPTION my_subscription ...;
EXCEPTION WHEN duplicate_object THEN
   CREATE SUBSCRIPTION my_subscription ...
      WITH (create_slot = false, slot_name = 'log_slot');
END;$$;