apache/seatunnel · warning

A slot marked as temporary or with an exported snapshot was…

Error message

A slot marked as temporary or with an exported snapshot was created, but not on a supported version of Postgres, ignoring!

What it means

createReplicationSlot logs this warning when dropSlotOnClose (temporary slot) or snapshot export was requested but the server predates PostgreSQL 9.4, the minimum version supporting TEMPORARY slots and exported snapshots. The connector proceeds to create the slot but ignores the temporary/exported-snapshot semantics.

Solutions

  1. Upgrade PostgreSQL to >= 9.4 (ideally >= 10) before using temporary slots or snapshot export.
  2. Set dropSlotOnClose=false (do not mark the slot temporary) if you must stay on the old server.
  3. Check the reported server version (SELECT version();) — some forks report older compatibility versions; align the driver/connector expectations.
  4. Avoid snapshot-dependent workflows (consistent snapshot offsets) on servers < 9.4.

Example fix

// before
PostgresConnectorConfig with slot.drop.on.close=true against PG 9.3
// after
// either upgrade server to >= 9.4 or:
// "slot.drop.on.close": "false"
Defensive patterns

Strategy: validation

Validate before calling

SHOW server_version_num; -- require >= 90400 before using temporary slots / snapshot export

Prevention

When it happens

Trigger: initReplicationSlot -> createReplicationSlot with dropSlotOnClose=true while pgConnection().haveMinimumServerVersion(ServerVersion.v9_4) is false — i.e., server version < 9.4.

Common situations: Connecting Debezium/openGauss CDC to a very old PostgreSQL (pre-9.4) or an openGauss version reporting an old compatibility version; users assuming logical decoding features exist on old servers.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/06cf1adec4cfdc5b. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-opengauss/src/main/java/io/debezium/connector/postgresql/connection/PostgresReplicationConnection.java:460

        // the options are not yet exported by the jdbc api wrapper, therefore, we just do
        // this ourselves but eventually this should be moved back to the jdbc API
        // see https://github.com/pgjdbc/pgjdbc/issues/1305
        ServerInfo.ReplicationSlot slotInfo;
        try {
            slotInfo = getSlotInfo();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        boolean shouldCreateSlot = ServerInfo.ReplicationSlot.INVALID == slotInfo;

        if (shouldCreateSlot) {
            LOGGER.debug("Creating new replication slot '{}' for plugin '{}'", slotName, plugin);
            String tempPart = "";
            // Exported snapshots are supported in Postgres 9.4+
            boolean canExportSnapshot = pgConnection().haveMinimumServerVersion(ServerVersion.v9_4);
            if ((dropSlotOnClose) && !canExportSnapshot) {
                LOGGER.warn(
                        "A slot marked as temporary or with an exported snapshot was created, "
                                + "but not on a supported version of Postgres, ignoring!");
            }
            if (useTemporarySlot()) {
                tempPart = "TEMPORARY";
            }

            // See https://www.postgresql.org/docs/current/logical-replication-quick-setup.html
            // For pgoutput specifically, the publication must be created prior to the slot.
            initPublication();

            try (Statement stmt = pgConnection().createStatement()) {
                String createCommand =
                        String.format(
                                "CREATE_REPLICATION_SLOT \"%s\" %s LOGICAL %s",
                                slotName, tempPart, plugin.getPostgresPluginName());
                LOGGER.info("Creating replication slot with command {}", createCommand);
                stmt.execute(createCommand);

View on GitHub (pinned to cf67b549a7)