{
  "ab_internal": {
    "isEnterprise": false,
    "ql": 400,
    "requireVersionIncrementsInPullRequests": true,
    "sl": 300
  },
  "allowedHosts": {
    "hosts": [
      "${host}",
      "${tunnel_method.tunnel_host}"
    ]
  },
  "connectorBuildOptions": {
    "baseImage": "docker.io/airbyte/java-connector-base:2.0.4@sha256:5f343797cfcf021ca98ba9bdf5970ef66cbf6222d8cc17b0d61d13860a5bcc2b"
  },
  "connectorIPCOptions": {
    "dataChannel": {
      "supportedSerialization": [
        "JSONL",
        "PROTOBUF"
      ],
      "supportedTransport": [
        "SOCKET",
        "STDIO"
      ],
      "version": "0.0.2"
    }
  },
  "connectorTestSuitesOptions": [
    {
      "suite": "unitTests"
    },
    {
      "suite": "integrationTests",
      "testSecrets": [
        {
          "fileName": "config_cdc.json",
          "name": "SECRET_SOURCE-POSTGRES_CDC__CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        },
        {
          "fileName": "config.json",
          "name": "SECRET_SOURCE-POSTGRES__CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        },
        {
          "fileName": "performance-config.json",
          "name": "SECRET_SOURCE_POSTGRES_PERFORMANCE_TEST_CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        }
      ]
    },
    {
      "suite": "acceptanceTests",
      "testSecrets": [
        {
          "fileName": "config_cdc.json",
          "name": "SECRET_SOURCE-POSTGRES_CDC__CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        },
        {
          "fileName": "config.json",
          "name": "SECRET_SOURCE-POSTGRES__CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        },
        {
          "fileName": "performance-config.json",
          "name": "SECRET_SOURCE_POSTGRES_PERFORMANCE_TEST_CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        }
      ]
    }
  ],
  "custom": false,
  "dockerImageTag": "3.8.0-preview.c1e8ab7",
  "dockerRepository": "airbyte/source-postgres",
  "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres",
  "externalDocumentationUrls": [
    {
      "title": "PostgreSQL documentation",
      "type": "api_reference",
      "url": "https://www.postgresql.org/docs/"
    },
    {
      "title": "Release Notes",
      "type": "api_release_history",
      "url": "https://www.postgresql.org/docs/release/"
    },
    {
      "title": "PostgreSQL authentication",
      "type": "authentication_guide",
      "url": "https://www.postgresql.org/docs/current/auth-methods.html"
    }
  ],
  "generated": {
    "git": {
      "commit_author": "Devin AI",
      "commit_author_email": "158243242+devin-ai-integration[bot]@users.noreply.github.com",
      "commit_sha": "52ce31c31e4265e08f52ae479c47aadcbb0fe90b",
      "commit_timestamp": "2026-04-04T23:57:56+00:00"
    },
    "sbomUrl": "https://connectors.airbyte.com/files/sbom/airbyte/source-postgres/3.8.0-preview.c1e8ab7.spdx.json",
    "source_file_info": {
      "metadata_bucket_name": "prod-airbyte-cloud-connector-metadata-service",
      "metadata_file_path": "metadata/airbyte/source-postgres/3.8.0-preview.c1e8ab7/metadata.yaml",
      "metadata_last_modified": "2026-04-05T11:50:14.750304+00:00",
      "registry_entry_generated_at": "2026-04-05T11:50:14.750304+00:00"
    }
  },
  "githubIssueLabel": "source-postgres",
  "icon": "postgresql.svg",
  "iconUrl": "https://connectors.airbyte.com/files/metadata/airbyte/source-postgres/latest/icon.svg",
  "language": "java",
  "license": "ELv2",
  "maxSecondsBetweenMessages": 7200,
  "name": "Postgres",
  "packageInfo": {},
  "public": true,
  "releaseStage": "generally_available",
  "releases": {
    "rolloutConfiguration": {
      "advanceDelayMinutes": 10,
      "enableProgressiveRollout": false,
      "initialPercentage": 0,
      "maxPercentage": 50
    }
  },
  "sourceDefinitionId": "decd338e-5647-4c0b-adf4-da0e75f5a750",
  "sourceType": "database",
  "spec": {
    "connectionSpecification": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": true,
      "groups": [
        {
          "id": "db"
        },
        {
          "id": "auth"
        },
        {
          "id": "security",
          "title": "Security"
        },
        {
          "id": "advanced",
          "title": "Advanced"
        },
        {
          "id": "performance",
          "title": "Performance"
        }
      ],
      "properties": {
        "check_privileges": {
          "always_show": true,
          "default": true,
          "description": "When this feature is enabled, during schema discovery the connector will query each table or view individually to check access privileges and inaccessible tables, views, or columns therein will be removed. In large schemas, this might cause schema discovery to take too long, in which case it might be advisable to disable this feature.",
          "group": "performance",
          "order": 13,
          "title": "Check Table and Column Access Privileges",
          "type": "boolean"
        },
        "checkpoint_target_interval_seconds": {
          "always_show": true,
          "default": 300,
          "description": "How often (in seconds) a stream should checkpoint, when possible.",
          "group": "performance",
          "order": 15,
          "title": "Checkpoint Target Time Interval",
          "type": "integer"
        },
        "database": {
          "description": "The name of the database to connect to.",
          "group": "db",
          "order": 3,
          "title": "Database Name",
          "type": "string"
        },
        "entra_client_id": {
          "description": "If using Entra service principal, the application ID of the service principal",
          "group": "auth",
          "order": 8,
          "title": "Azure Entra Client Id",
          "type": "string"
        },
        "entra_service_principal_auth": {
          "default": false,
          "description": "Interpret password as a client secret for a Microsoft Entra service principal",
          "group": "auth",
          "order": 6,
          "title": "Azure Entra Service Principal Authentication",
          "type": "boolean"
        },
        "entra_tenant_id": {
          "description": "If using Entra service principal, the ID of the tenant",
          "group": "auth",
          "order": 7,
          "title": "Azure Entra Tenant Id",
          "type": "string"
        },
        "host": {
          "description": "Hostname of the database.",
          "group": "db",
          "order": 1,
          "title": "Host",
          "type": "string"
        },
        "jdbc_url_params": {
          "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3). For more information read about <a href=\"https://jdbc.postgresql.org/documentation/head/connect.html\">JDBC URL parameters</a>.",
          "group": "advanced",
          "order": 10,
          "pattern_descriptor": "key1=value1&key2=value2",
          "title": "JDBC URL Parameters (Advanced)",
          "type": "string"
        },
        "max_db_connections": {
          "always_show": true,
          "description": "Maximum number of concurrent queries to the database. Leave empty to let Airbyte optimize performance.",
          "group": "performance",
          "order": 16,
          "title": "Max Concurrent Queries to Database",
          "type": "integer"
        },
        "password": {
          "airbyte_secret": true,
          "always_show": true,
          "description": "The password associated with the username.",
          "group": "auth",
          "order": 5,
          "title": "Password",
          "type": "string"
        },
        "port": {
          "default": 5432,
          "description": "Port of the database. Defaults to 5432.",
          "group": "db",
          "maximum": 65536,
          "minimum": 0,
          "order": 2,
          "title": "Port",
          "type": "integer"
        },
        "replication_method": {
          "description": "Configures how data is extracted from the database.",
          "display_type": "radio",
          "group": "advanced",
          "oneOf": [
            {
              "additionalProperties": true,
              "description": "<i>Recommended</i> - Incrementally reads new inserts, updates, and deletes using Postgres's <a href=\"https://docs.airbyte.com/integrations/connectors/source-postgres#getting-started\"> change data capture feature</a>. This must be enabled on your database.",
              "properties": {
                "debezium_shutdown_timeout_seconds": {
                  "default": 60,
                  "description": "The amount of time to allow the Debezium Engine to shut down, in seconds.",
                  "max": 3600,
                  "min": 1,
                  "order": 8,
                  "title": "Debezium Engine Shutdown Timeout in Seconds (Advanced)",
                  "type": "integer"
                },
                "heartbeat_action_query": {
                  "default": "",
                  "description": "Specifies a query that the connector executes on the source database when the connector sends a heartbeat message. Please see the <a href=\"https://docs.airbyte.com/integrations/sources/postgres/postgres-troubleshooting#advanced-wal-disk-consumption-and-heartbeat-action-query\">setup guide</a> for how and when to configure this setting.",
                  "order": 5,
                  "title": "Debezium heartbeat query (Advanced)",
                  "type": "string"
                },
                "initial_load_timeout_hours": {
                  "default": 8,
                  "description": "The amount of time an initial load is allowed to continue for before catching up on CDC events.",
                  "max": 24,
                  "min": 4,
                  "order": 7,
                  "title": "Initial Load Timeout in Hours (Advanced)",
                  "type": "integer"
                },
                "initial_waiting_seconds": {
                  "default": 1200,
                  "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 1200 seconds. Valid range: 120 seconds to 2400 seconds. Read about <a href=\"https://docs.airbyte.com/integrations/sources/postgres/postgres-troubleshooting#advanced-setting-up-initial-cdc-waiting-time\">initial waiting time</a>.",
                  "max": 2400,
                  "min": 120,
                  "order": 3,
                  "title": "Initial Waiting Time in Seconds (Advanced)",
                  "type": "integer"
                },
                "invalid_cdc_cursor_position_behavior": {
                  "default": "Fail sync",
                  "description": "Determines whether Airbyte should fail or re-sync data in case of an stale/invalid cursor value in the mined logs. If 'Fail sync' is chosen, a user will have to manually reset the connection before being able to continue syncing data. If 'Re-sync data' is chosen, Airbyte will automatically trigger a refresh but could lead to higher cloud costs and data loss.",
                  "enum": [
                    "Fail sync",
                    "Re-sync data"
                  ],
                  "order": 6,
                  "title": "Invalid CDC Position Behavior (Advanced)",
                  "type": "string"
                },
                "lsn_commit_behaviour": {
                  "default": "After loading Data in the destination",
                  "description": "Determines when Airbyte should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.",
                  "enum": [
                    "While reading Data",
                    "After loading Data in the destination"
                  ],
                  "order": 4,
                  "title": "LSN commit behavior",
                  "type": "string"
                },
                "method": {
                  "default": "CDC",
                  "enum": [
                    "CDC"
                  ],
                  "type": "string"
                },
                "publication": {
                  "always_show": true,
                  "description": "A Postgres publication used for consuming changes. Read about <a href=\\\"https://docs.airbyte.com/integrations/sources/postgres#step-4-create-publications-and-replication-identities-for-tables\\\">publications and replication identities</a>.",
                  "minLength": 1,
                  "order": 2,
                  "title": "Publication",
                  "type": "string"
                },
                "replication_slot": {
                  "always_show": true,
                  "description": "A plugin logical replication slot. Read about <a href=\\\"https://docs.airbyte.com/integrations/sources/postgres#step-3-create-replication-slot\\\">replication slots</a>.",
                  "minLength": 1,
                  "order": 1,
                  "title": "Replication Slot",
                  "type": "string"
                }
              },
              "required": [
                "method",
                "replication_slot",
                "publication"
              ],
              "title": "Read Changes using Change Data Capture (CDC)",
              "type": "object"
            },
            {
              "additionalProperties": true,
              "description": "<i>Recommended</i> - Incrementally reads new inserts and updates via Postgres <a href=\"https://docs.airbyte.com/integrations/sources/postgres/#xmin\">Xmin system column</a>. Suitable for databases that have low transaction pressure.",
              "properties": {
                "method": {
                  "default": "Xmin",
                  "enum": [
                    "Xmin"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "method"
              ],
              "title": "Detect Changes with Xmin System Column",
              "type": "object"
            },
            {
              "additionalProperties": true,
              "description": "Incrementally detects new inserts and updates using the <a href=\"https://docs.airbyte.com/understanding-airbyte/connections/incremental-append/#user-defined-cursor\">cursor column</a> chosen when configuring a connection (e.g. created_at, updated_at).",
              "properties": {
                "method": {
                  "default": "Standard",
                  "enum": [
                    "Standard"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "method"
              ],
              "title": "Scan Changes with User Defined Cursor",
              "type": "object"
            }
          ],
          "order": 12,
          "title": "Update Method",
          "type": "object"
        },
        "schemas": {
          "description": "The list of schemas to sync from. Defaults to public. Case sensitive.",
          "group": "db",
          "items": {
            "type": "string"
          },
          "order": 9,
          "title": "Schemas",
          "type": "array",
          "uniqueItems": true
        },
        "ssl_mode": {
          "default": "require",
          "description": "The encryption method which is used when communicating with the database.",
          "group": "security",
          "oneOf": [
            {
              "additionalProperties": true,
              "description": "To force communication without encryption.",
              "properties": {
                "mode": {
                  "default": "disable",
                  "enum": [
                    "disable"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "mode"
              ],
              "title": "disable",
              "type": "object"
            },
            {
              "additionalProperties": true,
              "description": "To allow encrypted communication, but not require it.",
              "properties": {
                "mode": {
                  "default": "allow",
                  "enum": [
                    "allow"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "mode"
              ],
              "title": "allow",
              "type": "object"
            },
            {
              "additionalProperties": true,
              "description": "To allow unencrypted communication only when the source doesn't support encryption.",
              "properties": {
                "mode": {
                  "default": "prefer",
                  "enum": [
                    "prefer"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "mode"
              ],
              "title": "prefer",
              "type": "object"
            },
            {
              "additionalProperties": true,
              "description": "To always require encryption. Note: The connection will fail if the source doesn't support encryption.",
              "properties": {
                "mode": {
                  "default": "require",
                  "enum": [
                    "require"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "mode"
              ],
              "title": "require",
              "type": "object"
            },
            {
              "additionalProperties": true,
              "description": "To always require encryption and verify that the source has a valid SSL certificate.",
              "properties": {
                "ca_certificate": {
                  "airbyte_secret": true,
                  "description": "CA certificate",
                  "multiline": true,
                  "title": "CA certificate",
                  "type": "string"
                },
                "client_certificate": {
                  "airbyte_secret": true,
                  "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)",
                  "multiline": true,
                  "title": "Client certificate File",
                  "type": "string"
                },
                "client_key": {
                  "airbyte_secret": true,
                  "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)",
                  "multiline": true,
                  "title": "Client Key",
                  "type": "string"
                },
                "client_key_password": {
                  "airbyte_secret": true,
                  "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.",
                  "multiline": true,
                  "title": "Client key password",
                  "type": "string"
                },
                "mode": {
                  "default": "verify-ca",
                  "enum": [
                    "verify-ca"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "mode",
                "ca_certificate"
              ],
              "title": "verify-ca",
              "type": "object"
            },
            {
              "additionalProperties": true,
              "description": "To always require encryption and verify that the source has a valid SSL certificate.",
              "properties": {
                "ca_certificate": {
                  "airbyte_secret": true,
                  "description": "CA certificate",
                  "multiline": true,
                  "title": "CA certificate",
                  "type": "string"
                },
                "client_certificate": {
                  "airbyte_secret": true,
                  "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)",
                  "multiline": true,
                  "title": "Client certificate File",
                  "type": "string"
                },
                "client_key": {
                  "airbyte_secret": true,
                  "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)",
                  "multiline": true,
                  "title": "Client Key",
                  "type": "string"
                },
                "client_key_password": {
                  "airbyte_secret": true,
                  "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.",
                  "multiline": true,
                  "title": "Client key password",
                  "type": "string"
                },
                "mode": {
                  "default": "verify-full",
                  "enum": [
                    "verify-full"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "mode",
                "ca_certificate"
              ],
              "title": "verify-full",
              "type": "object"
            }
          ],
          "order": 8,
          "title": "SSL Mode",
          "type": "object"
        },
        "tunnel_method": {
          "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.",
          "group": "security",
          "oneOf": [
            {
              "additionalProperties": true,
              "description": "No ssh tunnel needed to connect to database",
              "properties": {
                "tunnel_method": {
                  "default": "NO_TUNNEL",
                  "enum": [
                    "NO_TUNNEL"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "tunnel_method"
              ],
              "title": "No Tunnel",
              "type": "object"
            },
            {
              "additionalProperties": true,
              "description": "Connect through a jump server tunnel host using username and ssh key",
              "properties": {
                "ssh_key": {
                  "airbyte_secret": true,
                  "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )",
                  "multiline": true,
                  "order": 4,
                  "title": "SSH Private Key",
                  "type": "string"
                },
                "tunnel_host": {
                  "description": "Hostname of the jump server host that allows inbound ssh tunnel.",
                  "order": 1,
                  "title": "SSH Tunnel Jump Server Host",
                  "type": "string"
                },
                "tunnel_method": {
                  "default": "SSH_KEY_AUTH",
                  "enum": [
                    "SSH_KEY_AUTH"
                  ],
                  "type": "string"
                },
                "tunnel_port": {
                  "default": 22,
                  "description": "Port on the proxy/jump server that accepts inbound ssh connections.",
                  "maximum": 65536,
                  "minimum": 0,
                  "order": 2,
                  "title": "SSH Connection Port",
                  "type": "integer"
                },
                "tunnel_user": {
                  "description": "OS-level username for logging into the jump server host",
                  "order": 3,
                  "title": "SSH Login Username",
                  "type": "string"
                }
              },
              "required": [
                "tunnel_method",
                "tunnel_host",
                "tunnel_port",
                "tunnel_user",
                "ssh_key"
              ],
              "title": "SSH Key Authentication",
              "type": "object"
            },
            {
              "additionalProperties": true,
              "description": "Connect through a jump server tunnel host using username and password authentication",
              "properties": {
                "tunnel_host": {
                  "description": "Hostname of the jump server host that allows inbound ssh tunnel.",
                  "order": 1,
                  "title": "SSH Tunnel Jump Server Host",
                  "type": "string"
                },
                "tunnel_method": {
                  "default": "SSH_PASSWORD_AUTH",
                  "enum": [
                    "SSH_PASSWORD_AUTH"
                  ],
                  "type": "string"
                },
                "tunnel_port": {
                  "default": 22,
                  "description": "Port on the proxy/jump server that accepts inbound ssh connections.",
                  "maximum": 65536,
                  "minimum": 0,
                  "order": 2,
                  "title": "SSH Connection Port",
                  "type": "integer"
                },
                "tunnel_user": {
                  "description": "OS-level username for logging into the jump server host",
                  "order": 3,
                  "title": "SSH Login Username",
                  "type": "string"
                },
                "tunnel_user_password": {
                  "airbyte_secret": true,
                  "description": "OS-level password for logging into the jump server host",
                  "order": 4,
                  "title": "Password",
                  "type": "string"
                }
              },
              "required": [
                "tunnel_method",
                "tunnel_host",
                "tunnel_port",
                "tunnel_user",
                "tunnel_user_password"
              ],
              "title": "Password Authentication",
              "type": "object"
            }
          ],
          "order": 11,
          "title": "SSH Tunnel Method",
          "type": "object"
        },
        "username": {
          "description": "The username which is used to access the database.",
          "group": "auth",
          "order": 4,
          "title": "Username",
          "type": "string"
        }
      },
      "required": [
        "host",
        "port",
        "database",
        "username",
        "tunnel_method",
        "replication_method"
      ],
      "title": "Postgres Source Spec",
      "type": "object"
    },
    "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres",
    "supported_destination_sync_modes": [],
    "supportsDBT": false,
    "supportsNormalization": false
  },
  "supportLevel": "certified",
  "supportsDataActivation": false,
  "supportsFileTransfer": false,
  "tags": [
    "language:java"
  ],
  "tombstone": false
}
