@Override
    public Map<String, String> tableOptions() {
        Map<String, String> options = super.tableOptions();
        if (getProperties() != null && !getProperties().isEmpty()) {
            options.putAll(getProperties());
        }
        options.put(PostgresConstant.CONNECTOR, PostgresConstant.POSTGRES_CDC);
        options.put(PostgresConstant.HOSTNAME, hostname);
        options.put(PostgresConstant.USERNAME, username);
        options.put(PostgresConstant.PASSWORD, password);
        options.put(PostgresConstant.DATABASE_NAME, database);
        options.put(PostgresConstant.SCHEMA_NAME, schema);
        options.put(PostgresConstant.PORT, port.toString());
        String formatTable =
                tableNames.size() == 1 ? tableNames.get(0) : String.format("(%s)", StringUtils.join(tableNames, "|"));
        options.put(PostgresConstant.TABLE_NAME, String.format("%s", formatTable));
        String decodingPluginNameOption;
        if (StringUtils.isNotEmpty(decodingPluginName)) {
            decodingPluginNameOption = decodingPluginName;
        } else {
            decodingPluginNameOption = PostgresConstant.PGOUTPUT;
        }
        options.put(PostgresConstant.DECODING_PLUGIN_NAME, decodingPluginNameOption);
        options.put(PostgresConstant.SLOT_NAME,
                UUID.randomUUID().toString().toLowerCase(Locale.ROOT).replaceAll("[\\-\\d]", ""));
        if (StringUtils.isNotBlank(serverTimeZone)) {
            options.put(PostgresConstant.SERVER_TIME_ZONE, serverTimeZone);
        }
        if (StringUtils.isNotBlank(scanStartupMode)) {
            options.put(PostgresConstant.DEBEZIUM_SNAPSHOT_MODE, scanStartupMode);
        }
        return options;
    }
generate table options

@return options
@see <a href="https://ververica.github.io/flink-cdc-connectors/master/content/connectors/postgres-cdc.html">postgres
cdc</a>
inlong-sort/sort-common/src/main/java/org/apache/inlong/sort/protocol/node/extract/PostgresExtractNode.java