swagger: "2.0" info: title: pgEdge Control Plane v1 API description: A distributed application that provides a declarative API to deploy and manage Postgres databases. version: v0.10.0 host: localhost:3000 consumes: - application/json - application/xml - application/gob produces: - application/json - application/xml - application/gob paths: /v1/cluster: get: tags: - Cluster summary: Get cluster description: Returns information about the cluster. operationId: control-plane#get-cluster responses: "200": description: OK response. schema: $ref: '#/definitions/Cluster' required: - id - status - hosts "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/cluster/init: get: tags: - Cluster summary: Initialize cluster description: Initializes a new cluster. operationId: control-plane#init-cluster parameters: - name: cluster_id in: query description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: false type: string responses: "200": description: OK response. schema: $ref: '#/definitions/ClusterJoinToken' required: - token - server_urls "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/cluster/join: post: tags: - Cluster summary: Join cluster description: Joins this host to an existing cluster. operationId: control-plane#join-cluster parameters: - name: Join-ClusterRequestBody in: body required: true schema: $ref: '#/definitions/ClusterJoinToken' required: - token - server_urls responses: "204": description: No Content response. "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "401": description: Unauthorized response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/cluster/join-token: get: tags: - Cluster summary: Get cluster join token description: Gets the join token for this cluster. operationId: control-plane#get-join-token responses: "200": description: OK response. schema: $ref: '#/definitions/ClusterJoinToken' required: - token - server_urls "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases: get: tags: - Database summary: List databases description: Lists all databases in the cluster. operationId: control-plane#list-databases parameters: - name: include in: query description: 'Optional fields to include in each database response. Supported values: available_upgrades.' required: false type: array items: type: string collectionFormat: multi responses: "200": description: OK response. schema: $ref: '#/definitions/ListDatabasesResponse' required: - databases "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http post: tags: - Database summary: Create database description: Creates a new database in the cluster. operationId: control-plane#create-database parameters: - name: Create-DatabaseRequestBody in: body required: true schema: $ref: '#/definitions/CreateDatabaseRequest' required: - spec responses: "200": description: OK response. schema: $ref: '#/definitions/CreateDatabaseResponse' required: - task - database "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}: get: tags: - Database summary: Get database description: Returns information about a particular database in the cluster. operationId: control-plane#get-database parameters: - name: include in: query description: 'Optional fields to include in the response. Supported values: available_upgrades.' required: false type: array items: type: string collectionFormat: multi - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string responses: "200": description: OK response. schema: $ref: '#/definitions/Database' required: - id - created_at - updated_at - state "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http post: tags: - Database summary: Update database description: Updates a database with the given specification. operationId: control-plane#update-database parameters: - name: force_update in: query description: Force update the database even if the spec is the same. required: false type: boolean default: false - name: remove_host in: query description: Host IDs to treat as removed during this update. Events targeting these hosts will be skipped. required: false type: array items: type: string collectionFormat: multi - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: Update-DatabaseRequestBody in: body required: true schema: $ref: '#/definitions/UpdateDatabaseRequest' responses: "200": description: OK response. schema: $ref: '#/definitions/UpdateDatabaseResponse' required: - task - database "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http delete: tags: - Database summary: Delete database description: Deletes a database from the cluster. operationId: control-plane#delete-database parameters: - name: force in: query description: Force deletion of a database even in an unmodifiable state required: false type: boolean default: false - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string responses: "200": description: OK response. schema: $ref: '#/definitions/DeleteDatabaseResponse' required: - task "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/instances/{instance_id}/restart: post: tags: - Database summary: Restart a database instance description: Restarts a specific instance within a database. Supports immediate or scheduled restarts. operationId: control-plane#restart-instance parameters: - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: instance_id in: path description: The ID of the instance to restart. required: true type: string maxLength: 63 minLength: 1 - name: object in: body required: true schema: type: object properties: scheduled_at: type: string description: The time at which the restart is scheduled. example: "2025-06-18T16:52:05Z" format: date-time responses: "200": description: OK response. schema: $ref: '#/definitions/RestartInstanceResponse' required: - task "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/instances/{instance_id}/start-instance: post: tags: - Database summary: Starts a database instance description: Starts a specific instance within a database. Supports immediate starts operationId: control-plane#start-instance parameters: - name: force in: query description: Force starting an instance even if database in an unmodifiable state required: false type: boolean default: false - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: instance_id in: path description: The ID of the instance to start. required: true type: string maxLength: 63 minLength: 1 responses: "200": description: OK response. schema: $ref: '#/definitions/StartInstanceResponse' required: - task "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/instances/{instance_id}/stop-instance: post: tags: - Database summary: Stops a database instance description: Stops a specific instance within a database. Supports immediate stops. operationId: control-plane#stop-instance parameters: - name: force in: query description: Force stopping an instance even if database in an unmodifiable state required: false type: boolean default: false - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: instance_id in: path description: The ID of the instance to stop. required: true type: string maxLength: 63 minLength: 1 responses: "200": description: OK response. schema: $ref: '#/definitions/StopInstanceResponse' required: - task "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/nodes/{node_name}/backups: post: tags: - Database summary: Backup database node description: Initiates a backup for a database node. operationId: control-plane#backup-database-node parameters: - name: force in: query description: Forcibly attempt backup even in unmodifiable state required: false type: boolean default: false - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: node_name in: path description: Name of the node to back up. required: true type: string pattern: n[0-9]+ - name: Backup-Database-NodeRequestBody in: body required: true schema: $ref: '#/definitions/BackupOptions' responses: "200": description: OK response. schema: $ref: '#/definitions/BackupDatabaseNodeResponse' required: - task "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/nodes/{node_name}/failover: post: tags: - Database summary: Failover database node description: Performs a failover for a node to a replica candidate. operationId: control-plane#failover-database-node parameters: - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: node_name in: path description: Name of the node to initiate the failover from. required: true type: string pattern: n[0-9]+ - name: Failover-Database-NodeRequestBody in: body required: true schema: $ref: '#/definitions/FailoverDatabaseNodeRequest' responses: "200": description: OK response. schema: $ref: '#/definitions/FailoverDatabaseNodeResponse' required: - task "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/nodes/{node_name}/switchover: post: tags: - Database summary: Switchover database node description: Performs a planned switchover for a node's primary to a replica candidate. operationId: control-plane#switchover-database-node parameters: - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: node_name in: path description: Name of the node to operate on. required: true type: string pattern: n[0-9]+ - name: Switchover-Database-NodeRequestBody in: body required: true schema: $ref: '#/definitions/ControlPlaneSwitchoverDatabaseNodeRequestBody' responses: "200": description: OK response. schema: $ref: '#/definitions/SwitchoverDatabaseNodeResponse' required: - task "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/restore: post: tags: - Database summary: Restore database description: Perform an in-place restore of one or more nodes using the given restore configuration. operationId: control-plane#restore-database parameters: - name: force in: query description: Force restoration of a database even in an unmodifiable state required: false type: boolean default: false - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: Restore-DatabaseRequestBody in: body required: true schema: $ref: '#/definitions/RestoreDatabaseRequest' responses: "200": description: OK response. schema: $ref: '#/definitions/RestoreDatabaseResponse' required: - task - node_tasks - database "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/tasks: get: tags: - Database summary: List database tasks description: Lists all tasks for a database. operationId: control-plane#list-database-tasks parameters: - name: after_task_id in: query description: ID of the task to start from. required: false type: string format: uuid - name: limit in: query description: Maximum number of tasks to return. required: false type: integer - name: sort_order in: query description: Sort order for the tasks. required: false type: string enum: - asc - ascend - ascending - desc - descend - descending - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string responses: "200": description: OK response. schema: $ref: '#/definitions/ListDatabaseTasksResponse' required: - tasks "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/tasks/{task_id}: get: tags: - Database summary: Get database task description: Returns information about a particular task. operationId: control-plane#get-database-task parameters: - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: task_id in: path description: ID of the task to get. required: true type: string format: uuid responses: "200": description: OK response. schema: $ref: '#/definitions/Task' required: - scope - entity_id - task_id - created_at - type - status "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/tasks/{task_id}/cancel: get: tags: - Database summary: Cancel a database task description: Cancels a running or pending task for a database. operationId: control-plane#cancel-database-task parameters: - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: task_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string responses: "200": description: OK response. schema: $ref: '#/definitions/Task' required: - scope - entity_id - task_id - created_at - type - status "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/tasks/{task_id}/log: get: tags: - Database summary: Get database task log description: Returns the log of a particular task for a database. operationId: control-plane#get-database-task-log parameters: - name: after_entry_id in: query description: ID of the entry to start from. required: false type: string format: uuid - name: limit in: query description: Maximum number of entries to return. required: false type: integer - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: task_id in: path description: ID of the task to get the log for. required: true type: string format: uuid responses: "200": description: OK response. schema: $ref: '#/definitions/TaskLog' required: - scope - entity_id - task_id - task_status - entries "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/databases/{database_id}/upgrade: post: tags: - Database summary: Apply database upgrade description: Applies a minor-version upgrade to a database. The target image must be a stable manifest entry in the same Postgres major / Spock major bucket as the current version and strictly newer. Container pull and restart happen asynchronously; this endpoint returns once redeployment is triggered. operationId: control-plane#apply-upgrade parameters: - name: database_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: Apply-UpgradeRequestBody in: body required: true schema: $ref: '#/definitions/ApplyUpgradeRequest' responses: "200": description: OK response. schema: $ref: '#/definitions/ApplyUpgradeResponse' required: - task - database "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/hosts: get: tags: - Host summary: List hosts description: Lists all hosts within the cluster. operationId: control-plane#list-hosts responses: "200": description: OK response. schema: $ref: '#/definitions/ListHostsResponse' required: - hosts "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/hosts/{host_id}: get: tags: - Host summary: Get host description: Returns information about a particular host in the cluster. operationId: control-plane#get-host parameters: - name: host_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string responses: "200": description: OK response. schema: $ref: '#/definitions/Host' required: - id - orchestrator - data_dir - peer_addresses - client_addresses - status "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http delete: tags: - Host summary: Remove host description: Removes a host from the cluster. operationId: control-plane#remove-host parameters: - name: force in: query description: 'Force removal even if instances exist or quorum would be violated. Use only for disaster recovery when a host is permanently lost. ' required: false type: boolean default: false - name: host_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string responses: "200": description: OK response. schema: $ref: '#/definitions/RemoveHostResponse' required: - task - update_database_tasks "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/hosts/{host_id}/tasks: get: tags: - Host summary: List host tasks description: Lists all tasks for a host. operationId: control-plane#list-host-tasks parameters: - name: after_task_id in: query description: ID of the task to start from. required: false type: string format: uuid - name: limit in: query description: Maximum number of tasks to return. required: false type: integer - name: sort_order in: query description: Sort order for the tasks. required: false type: string enum: - asc - ascend - ascending - desc - descend - descending - name: host_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string responses: "200": description: OK response. schema: $ref: '#/definitions/ListHostTasksResponse' required: - tasks "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/hosts/{host_id}/tasks/{task_id}: get: tags: - Host summary: Get host task description: Returns information about a particular task for a host. operationId: control-plane#get-host-task parameters: - name: host_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: task_id in: path description: ID of the task to get. required: true type: string format: uuid responses: "200": description: OK response. schema: $ref: '#/definitions/Task' required: - scope - entity_id - task_id - created_at - type - status "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/hosts/{host_id}/tasks/{task_id}/logs: get: tags: - Host summary: Get host task logs description: Returns the log of a particular task for a host. operationId: control-plane#get-host-task-log parameters: - name: after_entry_id in: query description: ID of the entry to start from. required: false type: string format: uuid - name: limit in: query description: Maximum number of entries to return. required: false type: integer - name: host_id in: path description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: true type: string - name: task_id in: path description: ID of the task to get the logs for. required: true type: string format: uuid responses: "200": description: OK response. schema: $ref: '#/definitions/TaskLog' required: - scope - entity_id - task_id - task_status - entries "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "404": description: Not Found response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/tasks: get: tags: - System summary: List tasks description: Lists tasks across all scopes with optional filtering by scope and entity ID. operationId: control-plane#list-tasks parameters: - name: scope in: query description: Optional scope to filter tasks (database or host). required: false type: string enum: - database - host - name: entity_id in: query description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. required: false type: string - name: after_task_id in: query description: ID of the task to start from. required: false type: string format: uuid - name: limit in: query description: Maximum number of tasks to return. required: false type: integer - name: sort_order in: query description: Sort order for the tasks. required: false type: string enum: - asc - ascend - ascending - desc - descend - descending responses: "200": description: OK response. schema: $ref: '#/definitions/ListTasksResponse' required: - tasks "400": description: Bad Request response. schema: $ref: '#/definitions/APIError' required: - name - message "409": description: Conflict response. schema: $ref: '#/definitions/APIError' required: - name - message "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http /v1/version: get: tags: - System summary: Get version description: Returns version information for this Control Plane server. operationId: control-plane#get-version responses: "200": description: OK response. schema: $ref: '#/definitions/VersionInfo' required: - version - revision - revision_time - arch "500": description: Internal Server Error response. schema: $ref: '#/definitions/APIError' required: - name - message default: description: Unexpected error response schema: $ref: '#/definitions/APIError' schemes: - http definitions: APIError: title: APIError type: object properties: message: type: string description: The error message. example: A longer description of the error. name: type: string description: The name of the error. example: error_name example: message: A longer description of the error. name: error_name required: - name - message ApplyUpgradeRequest: title: ApplyUpgradeRequest type: object properties: image: type: string description: Full container image reference of the upgrade target. Must match the image field of a stable manifest entry in the same Postgres major / Spock major bucket as the current version and be strictly newer. example: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.8-standard-1 minLength: 1 example: image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.8-standard-1 required: - image ApplyUpgradeResponse: title: ApplyUpgradeResponse type: object properties: database: $ref: '#/definitions/Database' task: $ref: '#/definitions/Task' example: database: created_at: "2025-06-18T16:52:05Z" id: storefront state: modifying updated_at: "2025-06-18T17:58:59Z" task: created_at: "2025-06-18T17:58:59Z" database_id: storefront status: pending task_id: 01978431-b628-758a-aec6-03b331fa1a17 type: upgrade required: - task - database AvailableUpgrade: title: AvailableUpgrade type: object properties: image: type: string description: Full container image reference for the upgrade candidate. example: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: type: string description: Postgres version of the upgrade candidate. example: "17.10" spock_version: type: string description: Spock major version of the upgrade candidate. example: "5" description: A newer stable image available for the database in the same Postgres major / Spock major bucket. example: image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" required: - postgres_version - spock_version - image BackupConfigSpec: title: BackupConfigSpec type: object properties: repositories: type: array items: $ref: '#/definitions/BackupRepositorySpec' description: The repositories for this backup configuration. example: - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 minItems: 1 schedules: type: array items: $ref: '#/definitions/BackupScheduleSpec' description: The schedules for this backup configuration. example: - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full maxItems: 32 example: repositories: - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full required: - repositories BackupDatabaseNodeResponse: title: BackupDatabaseNodeResponse type: object properties: task: $ref: '#/definitions/Task' example: task: created_at: "2025-06-18T17:54:28Z" database_id: storefront status: pending task_id: 0197842d-9082-7496-b787-77bd2e11809f type: node_backup required: - task BackupOptions: title: BackupOptions type: object properties: annotations: type: object description: Annotations for the backup. example: key: value additionalProperties: type: string example: Explicabo culpa eos natus aperiam excepturi consectetur. backup_options: type: object description: Options for the backup. example: archive-check: "n" additionalProperties: type: string example: Ut aperiam. type: type: string description: The type of backup. example: full enum: - full - diff - incr example: annotations: initiated-by: backup-cron-job backup_options: archive-check: "n" type: full required: - type BackupRepositorySpec: title: BackupRepositorySpec type: object properties: azure_account: type: string description: The Azure account name for this repository. Only applies when type = 'azure'. example: pgedge-backups minLength: 3 maxLength: 24 azure_container: type: string description: The Azure container name for this repository. Only applies when type = 'azure'. example: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 minLength: 3 maxLength: 63 azure_endpoint: type: string description: The optional Azure endpoint for this repository. Only applies when type = 'azure'. example: blob.core.usgovcloudapi.net minLength: 3 maxLength: 128 azure_key: type: string description: The Azure storage account access key to use for this repository. This field will be excluded from the response of all endpoints. It can also be omitted from update requests to keep the current value. example: YXpLZXk= maxLength: 128 base_path: type: string description: The base path within the repository to store backups. Required for type = 'posix' and 'cifs'. example: /backups maxLength: 256 custom_options: type: object description: Additional options to apply to this repository. example: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB additionalProperties: type: string example: Unde maiores. gcs_bucket: type: string description: The GCS bucket name for this repository. Only applies when type = 'gcs'. example: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 minLength: 3 maxLength: 63 gcs_endpoint: type: string description: The optional GCS endpoint for this repository. Only applies when type = 'gcs'. example: localhost minLength: 3 maxLength: 128 gcs_key: type: string description: Optional base64-encoded private key data. If omitted, pgbackrest will use the service account attached to the instance profile. This field will be excluded from the response of all endpoints. It can also be omitted from update requests to keep the current value. example: ZXhhbXBsZSBnY3Mga2V5Cg== maxLength: 1024 id: type: string description: The unique identifier of this repository. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 retention_full: type: integer description: The count of full backups to retain or the time to retain full backups. example: 2 format: int64 minimum: 1 maximum: 9.999999e+06 retention_full_type: type: string description: The type of measure used for retention_full. example: count enum: - time - count s3_bucket: type: string description: The S3 bucket name for this repository. Only applies when type = 's3'. example: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 minLength: 3 maxLength: 63 s3_endpoint: type: string description: The optional S3 endpoint for this repository. Only applies when type = 's3'. example: s3.us-east-1.amazonaws.com minLength: 3 maxLength: 128 s3_key: type: string description: An optional AWS access key ID to use for this repository. If not provided, pgbackrest will use the default credential provider chain. This field will be excluded from the response of all endpoints. It can also be omitted from update requests to keep the current value. example: AKIAIOSFODNN7EXAMPLE maxLength: 128 s3_key_secret: type: string description: The corresponding secret for the AWS access key ID in s3_key. This field will be excluded from the response of all endpoints. It can also be omitted from update requests to keep the current value. example: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY maxLength: 128 s3_region: type: string description: The region of the S3 bucket for this repository. Only applies when type = 's3'. example: us-east-1 minLength: 1 maxLength: 32 type: type: string description: The type of this repository. example: s3 enum: - s3 - gcs - azure - posix - cifs example: azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 required: - type BackupScheduleSpec: title: BackupScheduleSpec type: object properties: cron_expression: type: string description: The cron expression for this schedule. example: 0 6 * * ? maxLength: 32 id: type: string description: The unique identifier for this backup schedule. example: daily-full-backup maxLength: 64 type: type: string description: The type of backup to take on this schedule. example: full enum: - full - incr example: cron_expression: 0 6 * * ? id: daily-full-backup type: full required: - id - type - cron_expression Cluster: title: Cluster type: object properties: hosts: type: array items: $ref: '#/definitions/Host' description: All of the hosts in the cluster. example: - client_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal cohort: cohort_id: zdjfu3tfxg1cihv3146ro3hy2 control_available: true member_id: lah4bsznw6kc0hp7biylmmmll type: swarm cpus: 16 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: server id: us-east-1 memory: 16GB orchestrator: swarm peer_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal status: components: {} state: healthy updated_at: "2025-06-17T00:00:00Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "18.1" spock_version: "5" - postgres_version: "16.10" spock_version: "5" - client_addresses: - 10.24.35.2 - i-058731542fee493f.ec2.internal cohort: cohort_id: zdjfu3tfxg1cihv3146ro3hy2 control_available: true member_id: cb88u9jael2psnepep5iuzb4r type: swarm cpus: 16 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: server id: ap-south-1 memory: 16GB orchestrator: swarm peer_addresses: - 10.24.35.2 - i-058731542fee493f.ec2.internal status: components: {} state: healthy updated_at: "2025-06-17T00:00:00Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "18.1" spock_version: "5" - postgres_version: "16.10" spock_version: "5" - client_addresses: - 10.24.36.2 - i-494027b7b53f6a23.ec2.internal cohort: cohort_id: zdjfu3tfxg1cihv3146ro3hy2 control_available: true member_id: u7u9i3nhqunxc4wj577l6ecb0 type: swarm cpus: 16 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: client id: eu-central-1 memory: 16GB orchestrator: swarm peer_addresses: - 10.24.36.2 - i-494027b7b53f6a23.ec2.internal status: components: {} state: healthy updated_at: "2025-06-17T00:00:00Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "18.1" spock_version: "5" - postgres_version: "16.10" spock_version: "5" id: type: string description: Unique identifier for the cluster. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 status: $ref: '#/definitions/ClusterStatus' example: hosts: - client_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal cohort: cohort_id: zdjfu3tfxg1cihv3146ro3hy2 control_available: true member_id: lah4bsznw6kc0hp7biylmmmll type: swarm cpus: 16 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: server id: us-east-1 memory: 16GB orchestrator: swarm peer_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal status: components: {} state: healthy updated_at: "2025-06-17T00:00:00Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "18.1" spock_version: "5" - postgres_version: "16.10" spock_version: "5" - client_addresses: - 10.24.35.2 - i-058731542fee493f.ec2.internal cohort: cohort_id: zdjfu3tfxg1cihv3146ro3hy2 control_available: true member_id: cb88u9jael2psnepep5iuzb4r type: swarm cpus: 16 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: server id: ap-south-1 memory: 16GB orchestrator: swarm peer_addresses: - 10.24.35.2 - i-058731542fee493f.ec2.internal status: components: {} state: healthy updated_at: "2025-06-17T00:00:00Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "18.1" spock_version: "5" - postgres_version: "16.10" spock_version: "5" - client_addresses: - 10.24.36.2 - i-494027b7b53f6a23.ec2.internal cohort: cohort_id: zdjfu3tfxg1cihv3146ro3hy2 control_available: true member_id: u7u9i3nhqunxc4wj577l6ecb0 type: swarm cpus: 16 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: client id: eu-central-1 memory: 16GB orchestrator: swarm peer_addresses: - 10.24.36.2 - i-494027b7b53f6a23.ec2.internal status: components: {} state: healthy updated_at: "2025-06-17T00:00:00Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "18.1" spock_version: "5" - postgres_version: "16.10" spock_version: "5" id: 76f9b8c0-4958-11f0-a489-3bb29577c696 status: state: available required: - id - status - hosts ClusterJoinToken: title: ClusterJoinToken type: object properties: server_urls: type: array items: type: string example: Tenetur est illum. description: Existing server to join example: - http://192.168.1.1:3000 token: type: string description: Token to join an existing cluster. example: PGEDGE-dd440afcf5de20ef8e8cf54f6cb9f125fd55f90e64faa94b906130b31235e730-41e975f41d7ea61058f2fe2572cb52dd example: server_urls: - http://192.168.1.1:3000 token: PGEDGE-dd440afcf5de20ef8e8cf54f6cb9f125fd55f90e64faa94b906130b31235e730-41e975f41d7ea61058f2fe2572cb52dd required: - token - server_urls ClusterStatus: title: ClusterStatus type: object properties: state: type: string description: The current state of the cluster. example: error enum: - available - error example: state: available required: - state ComponentStatus: title: ComponentStatus type: object properties: details: type: object description: Additional details about the component. example: alarms: - '3: NOSPACE' additionalProperties: true error: type: string description: Error message from any errors that occurred during the health check. example: failed to connect to etcd healthy: type: boolean description: Indicates if the component is healthy. example: false example: details: alarms: - '3: NOSPACE' error: failed to connect to etcd healthy: false required: - healthy ControlPlaneSwitchoverDatabaseNodeRequestBody: title: ControlPlaneSwitchoverDatabaseNodeRequestBody type: object properties: candidate_instance_id: type: string description: Optional instance_id for the replica candidate. example: 68f50878-44d2-4524-a823-e31bd478706d-n1-689qacsi minLength: 1 maxLength: 63 scheduled_at: type: string description: Optional scheduled time (ISO8601) for the switchover. If absent switchover happens immediately. example: "2025-09-20T22:00:00+05:30" format: date-time example: candidate_instance_id: 68f50878-44d2-4524-a823-e31bd478706d-n1-689qacsi scheduled_at: "2025-09-20T22:00:00+05:30" CreateDatabaseRequest: title: CreateDatabaseRequest type: object properties: id: type: string description: Unique identifier for the database. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 spec: $ref: '#/definitions/DatabaseSpec' tenant_id: type: string description: Unique identifier for the database's owner. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 example: id: storefront spec: database_name: storefront database_users: - attributes: - LOGIN - SUPERUSER db_owner: true password: password username: admin nodes: - host_ids: - us-east-1 name: n1 - host_ids: - ap-south-1 name: n2 - host_ids: - eu-central-1 name: n3 port: 5432 postgresql_conf: max_connections: 5000 required: - spec CreateDatabaseResponse: title: CreateDatabaseResponse type: object properties: database: $ref: '#/definitions/Database' task: $ref: '#/definitions/Task' example: database: created_at: "2025-06-18T16:52:05Z" id: storefront spec: database_name: storefront database_users: - attributes: - SUPERUSER - LOGIN db_owner: true username: admin nodes: - host_ids: - us-east-1 name: n1 - host_ids: - ap-south-1 name: n2 - host_ids: - eu-central-1 name: n3 port: 5432 postgres_version: "17.6" spock_version: "5" state: creating updated_at: "2025-06-18T16:52:05Z" task: created_at: "2025-06-18T16:52:05Z" database_id: storefront status: pending task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create required: - task - database Database: title: Database type: object properties: available_upgrades: type: array items: $ref: '#/definitions/AvailableUpgrade' description: Newer stable image versions available in the same Postgres major / Spock major bucket. Present only when ?include=available_upgrades is set. example: - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" created_at: type: string description: The time that the database was created. example: "2025-01-01T01:30:00Z" format: date-time id: type: string description: Unique identifier for the database. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 instances: type: array items: $ref: '#/definitions/Instance' description: All of the instances in the database. example: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2011-03-15T17:48:48Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: n1 postgres: patroni_paused: false patroni_state: unknown pending_restart: true role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2011-03-15T17:48:48Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: n1 postgres: patroni_paused: false patroni_state: unknown pending_restart: true role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" service_instances: type: array items: $ref: '#/definitions/ServiceInstance' description: Service instances running alongside this database. example: - created_at: "2025-01-28T10:00:00Z" database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 error: 'failed to start container: image not found' host_id: host-1 service_id: mcp-server service_instance_id: mcp-server-host-1 state: running status: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal container_id: a1b2c3d4e5f6 health_check: checked_at: "2025-01-28T10:00:00Z" message: Connection refused status: healthy image_version: 1.0.0 last_health_at: "2025-01-28T10:00:00Z" ports: - container_port: 8080 host_port: 8080 name: web-client - container_port: 8080 host_port: 8080 name: web-client - container_port: 8080 host_port: 8080 name: web-client service_ready: true updated_at: "2025-01-28T10:05:00Z" - created_at: "2025-01-28T10:00:00Z" database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 error: 'failed to start container: image not found' host_id: host-1 service_id: mcp-server service_instance_id: mcp-server-host-1 state: running status: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal container_id: a1b2c3d4e5f6 health_check: checked_at: "2025-01-28T10:00:00Z" message: Connection refused status: healthy image_version: 1.0.0 last_health_at: "2025-01-28T10:00:00Z" ports: - container_port: 8080 host_port: 8080 name: web-client - container_port: 8080 host_port: 8080 name: web-client - container_port: 8080 host_port: 8080 name: web-client service_ready: true updated_at: "2025-01-28T10:05:00Z" - created_at: "2025-01-28T10:00:00Z" database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 error: 'failed to start container: image not found' host_id: host-1 service_id: mcp-server service_instance_id: mcp-server-host-1 state: running status: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal container_id: a1b2c3d4e5f6 health_check: checked_at: "2025-01-28T10:00:00Z" message: Connection refused status: healthy image_version: 1.0.0 last_health_at: "2025-01-28T10:00:00Z" ports: - container_port: 8080 host_port: 8080 name: web-client - container_port: 8080 host_port: 8080 name: web-client - container_port: 8080 host_port: 8080 name: web-client service_ready: true updated_at: "2025-01-28T10:05:00Z" spec: $ref: '#/definitions/DatabaseSpec' state: type: string description: Current state of the database. example: restoring enum: - creating - modifying - available - deleting - degraded - failed - restoring - unknown tenant_id: type: string description: Unique identifier for the database's owner. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 updated_at: type: string description: The time that the database was last updated. example: "2025-01-01T02:30:00Z" format: date-time example: created_at: "2025-06-18T16:52:05Z" id: storefront instances: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2025-06-18T16:52:22Z" host_id: us-east-1 id: storefront-n1-689qacsi node_name: n1 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n3 provider_node: n3 status: replicating - name: sub_n1n2 provider_node: n2 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-18T17:58:56Z" updated_at: "2025-06-18T17:54:36Z" - connection_info: addresses: - 10.24.35.2 - i-058731542fee493f.ec2.internal port: 5432 created_at: "2025-06-18T16:52:22Z" host_id: ap-south-1 id: storefront-n2-9ptayhma node_name: n2 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n2n1 provider_node: n1 status: replicating - name: sub_n2n3 provider_node: n3 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-18T17:58:56Z" updated_at: "2025-06-18T17:54:01Z" - connection_info: addresses: - 10.24.36.2 - i-494027b7b53f6a23.ec2.internal port: 5432 created_at: "2025-06-18T16:52:22Z" host_id: eu-central-1 id: storefront-n3-ant97dj4 node_name: n3 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n3n1 provider_node: n1 status: replicating - name: sub_n3n2 provider_node: n2 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-18T17:58:56Z" updated_at: "2025-06-18T17:54:01Z" spec: database_name: storefront database_users: - attributes: - SUPERUSER - LOGIN db_owner: true username: admin nodes: - host_ids: - us-east-1 name: n1 - host_ids: - ap-south-1 name: n2 - host_ids: - eu-central-1 name: n3 port: 5432 postgres_version: "17.6" spock_version: "5" state: restoring updated_at: "2025-06-18T17:58:59Z" required: - id - created_at - updated_at - state DatabaseConnection: title: DatabaseConnection type: object properties: target_nodes: type: array items: type: string example: Aut reprehenderit totam ea. description: Optional ordered list of database node names. When set, the service's database connection includes only the listed nodes in the specified order. example: - n1 - n2 target_session_attrs: type: string description: 'Optional libpq target_session_attrs value. When set, overrides the default derived from the service config. Valid values: primary, prefer-standby, standby, read-write, any.' example: primary enum: - primary - prefer-standby - standby - read-write - any description: Controls how the service connects to the database. When omitted, all nodes are included with the local node first and target_session_attrs is derived from the service config. example: target_nodes: - n1 - n2 target_session_attrs: primary DatabaseNodeSpec: title: DatabaseNodeSpec type: object properties: backup_config: $ref: '#/definitions/BackupConfigSpec' cpus: type: string description: The number of CPUs to allocate for the database on this node and to use for tuning Postgres. It can include the SI suffix 'm', e.g. '500m' for 500 millicpus. Cannot allocate units smaller than 1m. Defaults to the number of available CPUs on the host if 0 or unspecified. Cannot allocate more CPUs than are available on the host. Whether this limit is enforced depends on the orchestrator. example: 500m pattern: ^[0-9]+(\.[0-9]{1,3}|m)?$ host_ids: type: array items: type: string example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 description: The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string description: The amount of memory in SI or IEC notation to allocate for the database on this node and to use for tuning Postgres. Defaults to the total available memory on the host. Whether this limit is enforced depends on the orchestrator. example: 500M maxLength: 16 name: type: string description: The name of the database node. example: n1 pattern: n[0-9]+ orchestrator_opts: $ref: '#/definitions/OrchestratorOpts' patroni_port: type: integer description: 'The port used by Patroni for this node. Overrides the Patroni port set in the DatabaseSpec. NOTE: This field is not currently supported for Docker Swarm.' example: 8888 format: int64 minimum: 0 maximum: 65535 pg_hba_conf: type: array items: type: string example: Sint voluptatibus earum occaecati. description: Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity. example: - host example myapp_user 10.0.0.0/8 scram-sha-256 pg_ident_conf: type: array items: type: string example: Reprehenderit error. description: Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries. example: - ssl_users CN=alice,O=example alice port: type: integer description: The port used by the Postgres database for this node. Overrides the Postgres port set in the DatabaseSpec. example: 5432 format: int64 minimum: 0 maximum: 65535 postgres_version: type: string description: The Postgres version for this node in 'major.minor' format. Overrides the Postgres version set in the DatabaseSpec. example: "17.6" pattern: ^\d{2}\.\d{1,2}$ postgresql_conf: type: object description: Additional postgresql.conf settings for this particular node. Will be merged with the settings provided by control-plane. example: max_connections: 1000 additionalProperties: true restore_config: $ref: '#/definitions/RestoreConfigSpec' source_node: type: string description: The name of the source node to use for sync. This is typically the node (like 'n1') from which the data will be copied to initialize this new node. example: n1 example: backup_config: repositories: - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 pg_ident_conf: - ssl_users CN=alice,O=example alice port: 5432 postgres_version: "17.6" postgresql_conf: max_connections: 1000 restore_config: repository: azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 restore_options: set: 20250505-153628F target: "123456" type: xid source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 source_database_name: northwind source_node_name: n1 source_node: n1 required: - name - host_ids DatabaseScripts: title: DatabaseScripts type: object properties: post_database_create: type: array items: type: string example: xpe minLength: 1 maxLength: 1024 description: The `post_database_create` script runs once on each primary instance of each node after the application database is created for the first time. Each element of the array is a single SQL statement. These statements run within a transaction in the application database after Spock is initialized, but before subscriptions are created. example: - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT USAGE ON SCHEMAS TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON TABLES TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON SEQUENCES TO app minItems: 0 maxItems: 256 post_init: type: array items: type: string example: "n" minLength: 1 maxLength: 1024 description: The `post_init` script runs on each primary instance of each node after the instance is created for the first time. Each element of the array is single SQL statement. These statements run within a transaction in the `postgres` database before the users are created, so this feature can be used to create nologin roles that can be assigned to the database users via their `roles` field. example: - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT USAGE ON SCHEMAS TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON TABLES TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON SEQUENCES TO app minItems: 0 maxItems: 256 example: post_database_create: - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT USAGE ON SCHEMAS TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON TABLES TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON SEQUENCES TO app post_init: - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT USAGE ON SCHEMAS TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON TABLES TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON SEQUENCES TO app DatabaseSpec: title: DatabaseSpec type: object properties: backup_config: $ref: '#/definitions/BackupConfigSpec' cpus: type: string description: The number of CPUs to allocate for the database and to use for tuning Postgres. Defaults to the number of available CPUs on the host. Can include an SI suffix, e.g. '500m' for 500 millicpus. Whether this limit is enforced depends on the orchestrator. example: 500m pattern: ^[0-9]+(\.[0-9]{1,3}|m)?$ database_name: type: string description: The name of the Postgres database. example: northwind minLength: 1 maxLength: 31 database_users: type: array items: $ref: '#/definitions/DatabaseUserSpec' description: The users to create for this database. example: - attributes: - LOGIN - CREATEDB - CREATEROLE db_owner: false password: secret roles: - pgedge_superuser username: admin - attributes: - LOGIN - CREATEDB - CREATEROLE db_owner: false password: secret roles: - pgedge_superuser username: admin - attributes: - LOGIN - CREATEDB - CREATEROLE db_owner: false password: secret roles: - pgedge_superuser username: admin maxItems: 16 memory: type: string description: The amount of memory in SI or IEC notation to allocate for the database and to use for tuning Postgres. Defaults to the total available memory on the host. Whether this limit is enforced depends on the orchestrator. example: 500M maxLength: 16 nodes: type: array items: $ref: '#/definitions/DatabaseNodeSpec' description: The Spock nodes for this database. example: - backup_config: repositories: - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 pg_ident_conf: - ssl_users CN=alice,O=example alice port: 5432 postgres_version: "17.6" postgresql_conf: max_connections: 1000 restore_config: repository: azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 restore_options: set: 20250505-153628F target: "123456" type: xid source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 source_database_name: northwind source_node_name: n1 source_node: n1 - backup_config: repositories: - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 pg_ident_conf: - ssl_users CN=alice,O=example alice port: 5432 postgres_version: "17.6" postgresql_conf: max_connections: 1000 restore_config: repository: azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 restore_options: set: 20250505-153628F target: "123456" type: xid source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 source_database_name: northwind source_node_name: n1 source_node: n1 - backup_config: repositories: - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 pg_ident_conf: - ssl_users CN=alice,O=example alice port: 5432 postgres_version: "17.6" postgresql_conf: max_connections: 1000 restore_config: repository: azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 restore_options: set: 20250505-153628F target: "123456" type: xid source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 source_database_name: northwind source_node_name: n1 source_node: n1 minItems: 1 maxItems: 9 orchestrator_opts: $ref: '#/definitions/OrchestratorOpts' patroni_port: type: integer description: 'The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.' example: 8888 format: int64 minimum: 0 maximum: 65535 pg_hba_conf: type: array items: type: string example: Error et quibusdam veniam debitis non expedita. description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. example: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 - hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users pg_ident_conf: type: array items: type: string example: Eligendi delectus sit quas. description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. example: - ssl_users CN=alice,O=example alice port: type: integer description: The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature. example: 5432 format: int64 minimum: 0 maximum: 65535 postgres_version: type: string description: The Postgres version in 'major.minor' format. example: "17.6" pattern: ^\d{2}\.\d{1,2}$ postgresql_conf: type: object description: Additional postgresql.conf settings. Will be merged with the settings provided by control-plane. example: max_connections: 1000 maxLength: 64 additionalProperties: true restore_config: $ref: '#/definitions/RestoreConfigSpec' scripts: $ref: '#/definitions/DatabaseScripts' services: type: array items: $ref: '#/definitions/ServiceSpec' description: Service instances to run alongside the database (e.g., MCP servers). example: - config: llm_model: gpt-4 llm_provider: openai openai_api_key: sk-... connect_as: app cpus: 500m database_connection: target_nodes: - n1 - n2 target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag version: latest - config: llm_model: gpt-4 llm_provider: openai openai_api_key: sk-... connect_as: app cpus: 500m database_connection: target_nodes: - n1 - n2 target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag version: latest spock_version: type: string description: The major version of the Spock extension. example: "5" pattern: ^\d{1}$ example: backup_config: repositories: - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full cpus: 500m database_name: northwind database_users: - attributes: - LOGIN - CREATEDB - CREATEROLE db_owner: false password: secret roles: - pgedge_superuser username: admin - attributes: - LOGIN - CREATEDB - CREATEROLE db_owner: false password: secret roles: - pgedge_superuser username: admin - attributes: - LOGIN - CREATEDB - CREATEROLE db_owner: false password: secret roles: - pgedge_superuser username: admin memory: 500M nodes: - backup_config: repositories: - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 pg_ident_conf: - ssl_users CN=alice,O=example alice port: 5432 postgres_version: "17.6" postgresql_conf: max_connections: 1000 restore_config: repository: azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 restore_options: set: 20250505-153628F target: "123456" type: xid source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 source_database_name: northwind source_node_name: n1 source_node: n1 - backup_config: repositories: - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab storage-upload-chunk-size: 5MiB gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 retention_full: 2 retention_full_type: count s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full - cron_expression: 0 6 * * ? id: daily-full-backup type: full cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 pg_ident_conf: - ssl_users CN=alice,O=example alice port: 5432 postgres_version: "17.6" postgresql_conf: max_connections: 1000 restore_config: repository: azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 restore_options: set: 20250505-153628F target: "123456" type: xid source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 source_database_name: northwind source_node_name: n1 source_node: n1 orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. patroni_port: 8888 pg_hba_conf: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 - hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users pg_ident_conf: - ssl_users CN=alice,O=example alice port: 5432 postgres_version: "17.6" postgresql_conf: max_connections: 1000 restore_config: repository: azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 restore_options: set: 20250505-153628F target: "123456" type: xid source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 source_database_name: northwind source_node_name: n1 scripts: post_database_create: - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT USAGE ON SCHEMAS TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON TABLES TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON SEQUENCES TO app post_init: - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT USAGE ON SCHEMAS TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON TABLES TO app - ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT ALL PRIVILEGES ON SEQUENCES TO app services: - config: llm_model: gpt-4 llm_provider: openai openai_api_key: sk-... connect_as: app cpus: 500m database_connection: target_nodes: - n1 - n2 target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag version: latest - config: llm_model: gpt-4 llm_provider: openai openai_api_key: sk-... connect_as: app cpus: 500m database_connection: target_nodes: - n1 - n2 target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag version: latest - config: llm_model: gpt-4 llm_provider: openai openai_api_key: sk-... connect_as: app cpus: 500m database_connection: target_nodes: - n1 - n2 target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag version: latest spock_version: "5" required: - database_name - nodes DatabaseSummary: title: DatabaseSummary type: object properties: available_upgrades: type: array items: $ref: '#/definitions/AvailableUpgrade' description: Newer stable image versions available in the same Postgres major / Spock major bucket. Present only when ?include=available_upgrades is set. example: - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" created_at: type: string description: The time that the database was created. example: "2025-01-01T01:30:00Z" format: date-time id: type: string description: Unique identifier for the database. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 instances: type: array items: $ref: '#/definitions/Instance' description: All of the instances in the database. example: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2011-03-15T17:48:48Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: n1 postgres: patroni_paused: false patroni_state: unknown pending_restart: true role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2011-03-15T17:48:48Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: n1 postgres: patroni_paused: false patroni_state: unknown pending_restart: true role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" state: type: string description: Current state of the database. example: unknown enum: - creating - modifying - available - deleting - degraded - failed - backing_up - restoring - unknown tenant_id: type: string description: Unique identifier for the database's owner. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 updated_at: type: string description: The time that the database was last updated. example: "2025-01-01T02:30:00Z" format: date-time example: available_upgrades: - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" created_at: "2025-01-01T01:30:00Z" id: 76f9b8c0-4958-11f0-a489-3bb29577c696 instances: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2011-03-15T17:48:48Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: n1 postgres: patroni_paused: false patroni_state: unknown pending_restart: true role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2011-03-15T17:48:48Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: n1 postgres: patroni_paused: false patroni_state: unknown pending_restart: true role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" state: creating tenant_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 updated_at: "2025-01-01T02:30:00Z" required: - id - created_at - updated_at - state DatabaseUserSpec: title: DatabaseUserSpec type: object properties: attributes: type: array items: type: string example: Explicabo eum dolores quae. description: The attributes to assign to this database user. example: - LOGIN - CREATEDB - CREATEROLE maxItems: 16 db_owner: type: boolean description: If true, this user will be granted database ownership. example: false password: type: string description: The password for this database user. This field will be excluded from the response of all endpoints. It can also be omitted from update requests to keep the current value. example: secret minLength: 1 roles: type: array items: type: string example: Molestiae neque. description: The roles to assign to this database user. example: - pgedge_superuser maxItems: 16 username: type: string description: The username for this database user. example: admin minLength: 1 example: attributes: - LOGIN - CREATEDB - CREATEROLE db_owner: false password: secret roles: - pgedge_superuser username: admin required: - username DeleteDatabaseResponse: title: DeleteDatabaseResponse type: object properties: task: $ref: '#/definitions/Task' example: task: created_at: "2025-06-18T16:48:59Z" database_id: storefront status: pending task_id: 019783f1-9f17-77e7-9a08-fa6ab39e3b29 type: delete required: - task ExtraNetworkSpec: title: ExtraNetworkSpec type: object properties: aliases: type: array items: type: string example: Enim dignissimos quasi nihil ea ut minima. description: Optional network-scoped aliases for the container. example: - pg-db - db-alias maxItems: 8 driver_opts: type: object description: Optional driver options for the network connection. example: com.docker.network.endpoint.expose: "true" additionalProperties: type: string example: Ut quaerat quae fugiat dignissimos qui. id: type: string description: The name or ID of the network to connect to. example: traefik-public description: Describes an additional Docker network to attach the container to. example: aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public required: - id ExtraVolumesSpec: title: ExtraVolumesSpec type: object properties: destination_path: type: string description: The path inside the container where the volume will be mounted. example: /backups/container maxLength: 256 host_path: type: string description: The host path for the volume. example: /Users/user/backups/host maxLength: 256 description: Extra volumes to mount from the host to the database container. example: destination_path: /backups/container host_path: /Users/user/backups/host required: - host_path - destination_path FailoverDatabaseNodeRequest: title: FailoverDatabaseNodeRequest type: object properties: candidate_instance_id: type: string description: Optional instance_id of the replica to promote. If omitted, a candidate will be selected. example: 68f50878-44d2-4524-a823-e31bd478706d-n1-689qacsi skip_validation: type: boolean description: If true, skip the health validations that prevent running failover on a healthy cluster. default: false example: false example: candidate_instance_id: 68f50878-44d2-4524-a823-e31bd478706d-n1-689qacsi skip_validation: true FailoverDatabaseNodeResponse: title: FailoverDatabaseNodeResponse type: object properties: task: $ref: '#/definitions/Task' example: task: created_at: "2025-06-18T17:54:28Z" database_id: storefront status: pending task_id: 0197842d-9082-7496-b787-77bd2e11809f type: failover required: - task HealthCheckResult: title: HealthCheckResult type: object properties: checked_at: type: string description: The time this health check was performed. example: "2025-01-28T10:00:00Z" format: date-time message: type: string description: Optional message about the health status. example: Connection refused status: type: string description: The health status. example: healthy enum: - healthy - unhealthy - unknown description: Health check result for a service instance. example: checked_at: "2025-01-28T10:00:00Z" message: Connection refused status: healthy required: - status - checked_at Host: title: Host type: object properties: client_addresses: type: array items: type: string example: Corporis rem consequuntur officiis. description: The addresses that this host advertises to client applications. example: - 10.24.34.2 - i-0123456789abcdef.ec2.internal cohort: $ref: '#/definitions/HostCohort' cpus: type: integer description: The number of CPUs on this host. example: 4 format: int64 data_dir: type: string description: The data directory for the host. example: /data default_pgedge_version: $ref: '#/definitions/PgEdgeVersion' etcd_mode: type: string description: The etcd mode for this host. example: server enum: - server - client id: type: string description: Unique identifier for the host. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 memory: type: string description: The amount of memory available on this host. example: 16GiB orchestrator: type: string description: The orchestrator used by this host. example: swarm peer_addresses: type: array items: type: string example: Fugiat dignissimos modi accusamus mollitia in ex. description: The addresses that this host advertises to other hosts. example: - 10.24.34.2 - i-0123456789abcdef.ec2.internal status: $ref: '#/definitions/HostStatus' supported_pgedge_versions: type: array items: $ref: '#/definitions/PgEdgeVersion' description: The PgEdge versions supported by this host. example: - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" example: client_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal cohort: control_available: true member_id: lah4bsznw6kc0hp7biylmmmll type: swarm cpus: 4 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: server id: 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 16GiB orchestrator: swarm peer_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal status: components: Id dolorem rerum labore commodi.: details: alarms: - '3: NOSPACE' error: failed to connect to etcd healthy: false state: available updated_at: "2021-07-01T12:34:56Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" required: - id - orchestrator - data_dir - peer_addresses - client_addresses - status HostCohort: title: HostCohort type: object properties: control_available: type: boolean description: Indicates if the host is a control node in the cohort. example: true member_id: type: string description: The member ID of the host within the cohort. example: lah4bsznw6kc0hp7biylmmmll type: type: string description: The type of cohort that the host belongs to. example: swarm example: control_available: true member_id: lah4bsznw6kc0hp7biylmmmll type: swarm required: - type - member_id - control_available HostStatus: title: HostStatus type: object properties: components: type: object description: The status of each component of the host. example: Sint consequuntur officiis deleniti.: details: alarms: - '3: NOSPACE' error: failed to connect to etcd healthy: false additionalProperties: $ref: '#/definitions/ComponentStatus' state: type: string example: available enum: - healthy - unreachable - degraded - unknown updated_at: type: string description: The last time the host status was updated. example: "2021-07-01T12:34:56Z" format: date-time example: components: Id ut.: details: alarms: - '3: NOSPACE' error: failed to connect to etcd healthy: false Incidunt reprehenderit odit cumque excepturi atque explicabo.: details: alarms: - '3: NOSPACE' error: failed to connect to etcd healthy: false state: available updated_at: "2021-07-01T12:34:56Z" required: - state - updated_at - components Instance: title: Instance type: object properties: connection_info: $ref: '#/definitions/InstanceConnectionInfo' created_at: type: string description: The time that the instance was created. example: "2000-04-29T09:31:53Z" format: date-time error: type: string description: An error message if the instance is in an error state. example: 'failed to get patroni status: connection refused' host_id: type: string description: The ID of the host this instance is running on. example: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: type: string description: Unique identifier for the instance. example: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: type: string description: The Spock node name for this instance. example: n1 postgres: $ref: '#/definitions/InstancePostgresStatus' spock: $ref: '#/definitions/InstanceSpockStatus' state: type: string example: stopped enum: - creating - modifying - deleting - backing_up - available - degraded - failed - stopped - unknown status_updated_at: type: string description: The time that the instance status information was last updated. example: "1980-08-18T06:13:24Z" format: date-time updated_at: type: string description: The time that the instance was last modified. example: "1977-02-11T08:26:00Z" format: date-time description: An instance of pgEdge Postgres running on a host. example: connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "1989-11-23T15:19:47Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: n1 postgres: patroni_paused: false patroni_state: unknown pending_restart: true role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 state: backing_up status_updated_at: "1980-12-18T10:07:58Z" updated_at: "1985-09-02T23:18:20Z" required: - id - host_id - node_name - created_at - updated_at - state InstanceConnectionInfo: title: InstanceConnectionInfo type: object properties: addresses: type: array items: type: string example: Reiciendis placeat et autem ipsa. description: The addresses of the host that's running this instance. example: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: type: integer description: The host port that Postgres is listening on for this instance. example: 5432 format: int64 description: Connection information for a pgEdge instance. example: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 InstancePostgresStatus: title: InstancePostgresStatus type: object properties: patroni_paused: type: boolean description: True if Patroni is paused for this instance. example: true patroni_state: type: string example: unknown pending_restart: type: boolean description: True if this instance has a pending restart from a configuration change. example: true role: type: string example: primary version: type: string description: The version of Postgres for this instance. example: "18.1" description: Postgres status information for a pgEdge instance. example: patroni_paused: false patroni_state: unknown pending_restart: false role: primary version: "18.1" InstanceSpockStatus: title: InstanceSpockStatus type: object properties: read_only: type: string description: The current spock.readonly setting. example: "off" subscriptions: type: array items: $ref: '#/definitions/InstanceSubscription' description: Status information for this instance's Spock subscriptions. example: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: type: string description: The version of Spock for this instance. example: 4.10.0 description: Spock status information for a pgEdge instance. example: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 InstanceSubscription: title: InstanceSubscription type: object properties: name: type: string description: The name of the subscription. example: sub_n1n2 provider_node: type: string description: The Spock node name of the provider for this subscription. example: n2 pattern: n[0-9]+ status: type: string description: The current status of the subscription. example: down description: Status information for a Spock subscription. example: name: sub_n1n2 provider_node: n2 status: down required: - provider_node - name - status ListDatabaseTasksResponse: title: ListDatabaseTasksResponse type: object properties: tasks: type: array items: $ref: '#/definitions/Task' description: The tasks for the given database. example: - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create example: tasks: - completed_at: "2025-06-18T17:54:36Z" created_at: "2025-06-18T17:54:28Z" database_id: storefront entity_id: storefront instance_id: storefront-n1-689qacsi scope: database status: completed task_id: 0197842d-9082-7496-b787-77bd2e11809f type: node_backup - completed_at: "2025-06-18T17:54:04Z" created_at: "2025-06-18T17:53:17Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 0197842c-7c4f-7a8c-829e-7405c2a41c8c type: update - completed_at: "2025-06-18T17:23:28Z" created_at: "2025-06-18T17:23:14Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 01978410-fb5d-7cd2-bbd2-66c0bf929dc0 type: update - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create required: - tasks ListDatabasesResponse: title: ListDatabasesResponse type: object properties: databases: type: array items: $ref: '#/definitions/DatabaseSummary' description: The databases managed by this cluster. example: - available_upgrades: - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" created_at: "2025-01-01T01:30:00Z" id: 76f9b8c0-4958-11f0-a489-3bb29577c696 instances: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2011-03-15T17:48:48Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: n1 postgres: patroni_paused: false patroni_state: unknown pending_restart: true role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2011-03-15T17:48:48Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: n1 postgres: patroni_paused: false patroni_state: unknown pending_restart: true role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" state: restoring tenant_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 updated_at: "2025-01-01T02:30:00Z" - available_upgrades: - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" - image: ghcr.io/pgedge/pgedge-postgres:17.10-spock5.0.9-standard-1 postgres_version: "17.10" spock_version: "5" created_at: "2025-01-01T01:30:00Z" id: 76f9b8c0-4958-11f0-a489-3bb29577c696 instances: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2011-03-15T17:48:48Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: n1 postgres: patroni_paused: false patroni_state: unknown pending_restart: true role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2011-03-15T17:48:48Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d node_name: n1 postgres: patroni_paused: false patroni_state: unknown pending_restart: true role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down - name: sub_n1n2 provider_node: n2 status: down version: 4.10.0 state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" state: restoring tenant_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 updated_at: "2025-01-01T02:30:00Z" example: databases: - created_at: "2025-06-17T20:05:10Z" id: inventory instances: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2025-06-17T20:05:10Z" host_id: us-east-1 id: inventory-n1-689qacsi node_name: n1 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n3 provider_node: n3 status: replicating - name: sub_n1n2 provider_node: n2 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-17T20:05:10Z" updated_at: "2025-06-17T20:05:10Z" - connection_info: addresses: - 10.24.35.2 - i-058731542fee493f.ec2.internal port: 5432 created_at: "2025-06-17T20:05:10Z" host_id: ap-south-1 id: inventory-n2-9ptayhma node_name: n2 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n2n1 provider_node: n1 status: replicating - name: sub_n2n3 provider_node: n3 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-17T20:05:10Z" updated_at: "2025-06-17T20:05:10Z" - connection_info: addresses: - 10.24.36.2 - i-494027b7b53f6a23.ec2.internal port: 5432 created_at: "2025-06-17T20:05:10Z" host_id: eu-central-1 id: inventory-n3-ant97dj4 node_name: n3 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n3n1 provider_node: n1 status: replicating - name: sub_n3n2 provider_node: n2 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-17T20:05:10Z" updated_at: "2025-06-17T20:05:10Z" state: available updated_at: "2025-06-17T20:05:10Z" - created_at: "2025-06-12T15:10:05Z" id: storefront instances: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 6432 created_at: "2025-06-12T15:10:05Z" host_id: us-east-1 id: storefront-n1-689qacsi node_name: n1 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n3 provider_node: n3 status: replicating - name: sub_n1n2 provider_node: n2 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-17T20:05:10Z" updated_at: "2025-06-12T15:10:05Z" - connection_info: addresses: - 10.24.35.2 - i-058731542fee493f.ec2.internal port: 6432 created_at: "2025-06-12T15:10:05Z" host_id: ap-south-1 id: storefront-n2-9ptayhma node_name: n2 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n2n1 provider_node: n1 status: replicating - name: sub_n2n3 provider_node: n3 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-17T20:05:10Z" updated_at: "2025-06-12T15:10:05Z" - connection_info: addresses: - 10.24.36.2 - i-494027b7b53f6a23.ec2.internal port: 6432 created_at: "2025-06-12T15:10:05Z" host_id: eu-central-1 id: storefront-n3-ant97dj4 node_name: n3 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n3n1 provider_node: n1 status: replicating - name: sub_n3n2 provider_node: n2 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-17T20:05:10Z" updated_at: "2025-06-12T15:10:05Z" state: available updated_at: "2025-06-12T15:10:05Z" required: - databases ListHostTasksResponse: title: ListHostTasksResponse type: object properties: tasks: type: array items: $ref: '#/definitions/Task' description: The tasks for the given host. example: - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create example: tasks: - completed_at: "2025-06-18T17:54:36Z" created_at: "2025-06-18T17:54:28Z" entity_id: host-1 host_id: host-1 scope: host status: completed task_id: 0197842d-9082-7496-b787-77bd2e11809f type: remove_host required: - tasks ListHostsResponse: title: ListHostsResponse type: object properties: hosts: type: array items: $ref: '#/definitions/Host' description: List of hosts in the cluster example: - client_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal cohort: control_available: true member_id: lah4bsznw6kc0hp7biylmmmll type: swarm cpus: 4 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: server id: 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 16GiB orchestrator: swarm peer_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal status: components: Id dolorem rerum labore commodi.: details: alarms: - '3: NOSPACE' error: failed to connect to etcd healthy: false state: available updated_at: "2021-07-01T12:34:56Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" - client_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal cohort: control_available: true member_id: lah4bsznw6kc0hp7biylmmmll type: swarm cpus: 4 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: server id: 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 16GiB orchestrator: swarm peer_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal status: components: Id dolorem rerum labore commodi.: details: alarms: - '3: NOSPACE' error: failed to connect to etcd healthy: false state: available updated_at: "2021-07-01T12:34:56Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" - postgres_version: "17.6" spock_version: "5" example: hosts: - client_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal cohort: cohort_id: zdjfu3tfxg1cihv3146ro3hy2 control_available: true member_id: lah4bsznw6kc0hp7biylmmmll type: swarm cpus: 16 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: server id: us-east-1 memory: 16GB orchestrator: swarm peer_addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal status: components: {} state: healthy updated_at: "2025-06-17T00:00:00Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "18.1" spock_version: "5" - postgres_version: "16.10" spock_version: "5" - client_addresses: - 10.24.35.2 - i-058731542fee493f.ec2.internal cohort: cohort_id: zdjfu3tfxg1cihv3146ro3hy2 control_available: true member_id: cb88u9jael2psnepep5iuzb4r type: swarm cpus: 16 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: server id: ap-south-1 memory: 16GB orchestrator: swarm peer_addresses: - 10.24.35.2 - i-058731542fee493f.ec2.internal status: components: {} state: healthy updated_at: "2025-06-17T00:00:00Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "18.1" spock_version: "5" - postgres_version: "16.10" spock_version: "5" - client_addresses: - 10.24.36.2 - i-494027b7b53f6a23.ec2.internal cohort: cohort_id: zdjfu3tfxg1cihv3146ro3hy2 control_available: true member_id: u7u9i3nhqunxc4wj577l6ecb0 type: swarm cpus: 16 data_dir: /data default_pgedge_version: postgres_version: "17.6" spock_version: "5" etcd_mode: client id: eu-central-1 memory: 16GB orchestrator: swarm peer_addresses: - 10.24.36.2 - i-494027b7b53f6a23.ec2.internal status: components: {} state: healthy updated_at: "2025-06-17T00:00:00Z" supported_pgedge_versions: - postgres_version: "17.6" spock_version: "5" - postgres_version: "18.1" spock_version: "5" - postgres_version: "16.10" spock_version: "5" required: - hosts ListTasksResponse: title: ListTasksResponse type: object properties: tasks: type: array items: $ref: '#/definitions/Task' description: The tasks for the given entity. example: - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create example: tasks: - completed_at: "2025-06-18T17:54:36Z" created_at: "2025-06-18T17:54:28Z" database_id: storefront entity_id: storefront instance_id: storefront-n1-689qacsi scope: database status: completed task_id: 0197842d-9082-7496-b787-77bd2e11809f type: node_backup - completed_at: "2025-06-18T17:54:36Z" created_at: "2025-06-18T17:54:28Z" entity_id: host-1 host_id: host-1 scope: host status: completed task_id: 0197842d-9082-7496-b787-77bd2e11809f type: remove_host required: - tasks OrchestratorOpts: title: OrchestratorOpts type: object properties: swarm: $ref: '#/definitions/SwarmOpts' description: Options specific to the selected orchestrator. example: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. PgEdgeVersion: title: PgEdgeVersion type: object properties: postgres_version: type: string description: The Postgres major and minor version. example: "17.6" spock_version: type: string description: The Spock major version. example: "5" example: postgres_version: "17.6" spock_version: "5" required: - postgres_version - spock_version PortMapping: title: PortMapping type: object properties: container_port: type: integer description: The port number inside the container. example: 8080 format: int64 minimum: 1 maximum: 65535 host_port: type: integer description: The port number on the host (if port-forwarded). example: 8080 format: int64 minimum: 1 maximum: 65535 name: type: string description: The name of the port (e.g., 'http', 'web-client'). example: web-client description: Port mapping information for a service instance. example: container_port: 8080 host_port: 8080 name: web-client required: - name RemoveHostResponse: title: RemoveHostResponse type: object properties: task: $ref: '#/definitions/Task' update_database_tasks: type: array items: $ref: '#/definitions/Task' description: The tasks that will update databases affected by the host removal. example: - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create example: task: completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create update_database_tasks: - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create required: - task - update_database_tasks RestartInstanceResponse: title: RestartInstanceResponse type: object properties: task: $ref: '#/definitions/Task' description: Returns a task representing the restart operation. example: task: created_at: "2025-06-18T16:52:05Z" database_id: f2f1cae9-6f37-4609-aa98-d0991bff3493 instance_id: f2f1cae9-6f37-4609-aa98-d0991bff3493-n1-689qacsi status: pending task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: restart_instance required: - task RestoreConfigSpec: title: RestoreConfigSpec type: object properties: repository: $ref: '#/definitions/RestoreRepositorySpec' restore_options: type: object description: Additional options to use when restoring this database. If omitted, the database will be restored to the latest point in the given repository. example: set: 20250505-153628F target: "123456" type: xid maxLength: 32 additionalProperties: type: string example: Aliquam neque velit. source_database_id: type: string description: The ID of the database to restore this database from. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 source_database_name: type: string description: The name of the database in this repository. The database will be renamed to the database_name in the DatabaseSpec after it's restored. example: northwind minLength: 1 maxLength: 31 source_node_name: type: string description: The name of the node to restore this database from. example: n1 pattern: n[0-9]+ example: repository: azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 restore_options: set: 20250505-153628F target: "123456" type: xid source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 source_database_name: northwind source_node_name: n1 required: - source_database_id - source_node_name - source_database_name - repository RestoreDatabaseRequest: title: RestoreDatabaseRequest type: object properties: restore_config: $ref: '#/definitions/RestoreConfigSpec' target_nodes: type: array items: type: string example: Et reprehenderit et nam quo qui. description: The nodes to restore. Defaults to all nodes if empty or unspecified. example: - n1 maxItems: 9 example: restore_config: repository: base_path: /backups type: posix source_database_id: storefront source_database_name: storefront source_node_name: n1 target_nodes: - n1 required: - restore_config RestoreDatabaseResponse: title: RestoreDatabaseResponse type: object properties: database: $ref: '#/definitions/Database' node_tasks: type: array items: $ref: '#/definitions/Task' description: The tasks that will restore each database node. example: - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create task: $ref: '#/definitions/Task' example: database: created_at: "2025-06-18T16:52:05Z" id: storefront instances: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2025-06-18T16:52:22Z" host_id: us-east-1 id: storefront-n1-689qacsi node_name: n1 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n3 provider_node: n3 status: replicating - name: sub_n1n2 provider_node: n2 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-18T17:58:56Z" updated_at: "2025-06-18T17:54:36Z" - connection_info: addresses: - 10.24.35.2 - i-058731542fee493f.ec2.internal port: 5432 created_at: "2025-06-18T16:52:22Z" host_id: ap-south-1 id: storefront-n2-9ptayhma node_name: n2 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n2n1 provider_node: n1 status: replicating - name: sub_n2n3 provider_node: n3 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-18T17:58:56Z" updated_at: "2025-06-18T17:54:01Z" - connection_info: addresses: - 10.24.36.2 - i-494027b7b53f6a23.ec2.internal port: 5432 created_at: "2025-06-18T16:52:22Z" host_id: eu-central-1 id: storefront-n3-ant97dj4 node_name: n3 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n3n1 provider_node: n1 status: replicating - name: sub_n3n2 provider_node: n2 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-18T17:58:56Z" updated_at: "2025-06-18T17:54:01Z" spec: database_name: storefront database_users: - attributes: - SUPERUSER - LOGIN db_owner: true username: admin nodes: - host_ids: - us-east-1 name: n1 - host_ids: - ap-south-1 name: n2 - host_ids: - eu-central-1 name: n3 port: 5432 postgres_version: "17.6" spock_version: "5" state: restoring updated_at: "2025-06-18T17:58:59Z" node_tasks: - created_at: "2025-06-18T17:58:59Z" database_id: storefront node_name: n1 parent_id: 01978431-b628-758a-aec6-03b331fa1a17 status: pending task_id: 01978431-b62b-723b-a09c-e4072cd64bdb type: node_restore - created_at: "2025-06-18T17:58:59Z" database_id: storefront node_name: n2 parent_id: 01978431-b628-758a-aec6-03b331fa1a17 status: pending task_id: 01978431-b62c-7593-aad8-43b03df2031b type: node_restore - created_at: "2025-06-18T17:58:59Z" database_id: storefront node_name: n3 parent_id: 01978431-b628-758a-aec6-03b331fa1a17 status: pending task_id: 01978431-b62d-7b65-ab09-272d0b2fea91 type: node_restore task: created_at: "2025-06-18T17:58:59Z" database_id: storefront status: pending task_id: 01978431-b628-758a-aec6-03b331fa1a17 type: restore required: - task - node_tasks - database RestoreRepositorySpec: title: RestoreRepositorySpec type: object properties: azure_account: type: string description: The Azure account name for this repository. Only applies when type = 'azure'. example: pgedge-backups minLength: 3 maxLength: 24 azure_container: type: string description: The Azure container name for this repository. Only applies when type = 'azure'. example: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 minLength: 3 maxLength: 63 azure_endpoint: type: string description: The optional Azure endpoint for this repository. Only applies when type = 'azure'. example: blob.core.usgovcloudapi.net minLength: 3 maxLength: 128 azure_key: type: string description: An optional Azure storage account access key to use for this repository. If not provided, pgbackrest will use the VM's managed identity. example: YXpLZXk= maxLength: 128 base_path: type: string description: The base path within the repository to store backups. Required for type = 'posix' and 'cifs'. example: /backups maxLength: 256 custom_options: type: object description: Additional options to apply to this repository. example: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab additionalProperties: type: string example: Quis praesentium ab fugit ipsam dolores rerum. gcs_bucket: type: string description: The GCS bucket name for this repository. Only applies when type = 'gcs'. example: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 minLength: 3 maxLength: 63 gcs_endpoint: type: string description: The optional GCS endpoint for this repository. Only applies when type = 'gcs'. example: localhost minLength: 3 maxLength: 128 gcs_key: type: string description: Optional base64-encoded private key data. If omitted, pgbackrest will use the service account attached to the instance profile. example: ZXhhbXBsZSBnY3Mga2V5Cg== maxLength: 1024 id: type: string description: The unique identifier of this repository. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 s3_bucket: type: string description: The S3 bucket name for this repository. Only applies when type = 's3'. example: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 minLength: 3 maxLength: 63 s3_endpoint: type: string description: The optional S3 endpoint for this repository. Only applies when type = 's3'. example: s3.us-east-1.amazonaws.com minLength: 3 maxLength: 128 s3_key: type: string description: An optional AWS access key ID to use for this repository. If not provided, pgbackrest will use the default credential provider chain. example: AKIAIOSFODNN7EXAMPLE maxLength: 128 s3_key_secret: type: string description: The corresponding secret for the AWS access key ID in s3_key. example: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY maxLength: 128 s3_region: type: string description: The region of the S3 bucket for this repository. Only applies when type = 's3'. example: us-east-1 minLength: 1 maxLength: 32 type: type: string description: The type of this repository. example: s3 enum: - s3 - gcs - azure - posix - cifs example: azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net azure_key: YXpLZXk= base_path: /backups custom_options: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 s3_endpoint: s3.us-east-1.amazonaws.com s3_key: AKIAIOSFODNN7EXAMPLE s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 required: - type ServiceInstance: title: ServiceInstance type: object properties: created_at: type: string description: The time that the service instance was created. example: "2025-01-28T10:00:00Z" format: date-time database_id: type: string description: The ID of the database this service belongs to. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 error: type: string description: An error message if the service instance is in an error state. example: 'failed to start container: image not found' host_id: type: string description: The ID of the host this service instance is running on. example: host-1 service_id: type: string description: The service ID from the DatabaseSpec. example: mcp-server service_instance_id: type: string description: Unique identifier for the service instance. example: mcp-server-host-1 state: type: string description: Current state of the service instance. example: running enum: - creating - running - failed - deleting status: $ref: '#/definitions/ServiceInstanceStatus' updated_at: type: string description: The time that the service instance was last updated. example: "2025-01-28T10:05:00Z" format: date-time description: A service instance running on a host alongside the database. example: created_at: "2025-01-28T10:00:00Z" database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 error: 'failed to start container: image not found' host_id: host-1 service_id: mcp-server service_instance_id: mcp-server-host-1 state: running status: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal container_id: a1b2c3d4e5f6 health_check: checked_at: "2025-01-28T10:00:00Z" message: Connection refused status: healthy image_version: 1.0.0 last_health_at: "2025-01-28T10:00:00Z" ports: - container_port: 8080 host_port: 8080 name: web-client - container_port: 8080 host_port: 8080 name: web-client - container_port: 8080 host_port: 8080 name: web-client service_ready: true updated_at: "2025-01-28T10:05:00Z" required: - service_instance_id - service_id - database_id - host_id - state - created_at - updated_at ServiceInstanceStatus: title: ServiceInstanceStatus type: object properties: addresses: type: array items: type: string example: Rerum dicta. description: The addresses of the host that's running this service instance. example: - 10.24.34.2 - i-0123456789abcdef.ec2.internal container_id: type: string description: The Docker container ID. example: a1b2c3d4e5f6 health_check: $ref: '#/definitions/HealthCheckResult' image_version: type: string description: The container image version currently running. example: 1.0.0 last_health_at: type: string description: The time of the last health check attempt. example: "2025-01-28T10:00:00Z" format: date-time ports: type: array items: $ref: '#/definitions/PortMapping' description: Port mappings for this service instance. example: - container_port: 8080 host_port: 8080 name: web-client - container_port: 8080 host_port: 8080 name: web-client - container_port: 8080 host_port: 8080 name: web-client service_ready: type: boolean description: Whether the service is ready to accept requests. example: true description: Runtime status information for a service instance. example: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal container_id: a1b2c3d4e5f6 health_check: checked_at: "2025-01-28T10:00:00Z" message: Connection refused status: healthy image_version: 1.0.0 last_health_at: "2025-01-28T10:00:00Z" ports: - container_port: 8080 host_port: 8080 name: web-client - container_port: 8080 host_port: 8080 name: web-client service_ready: true ServiceSpec: title: ServiceSpec type: object properties: config: type: object description: Service-specific configuration. For MCP services, this includes llm_provider, llm_model, and provider-specific API keys. example: llm_model: gpt-4 llm_provider: openai openai_api_key: sk-... additionalProperties: true connect_as: type: string description: Username of the database_users entry this service connects as. The user must exist in database_users and have appropriate roles for the service's needs. example: app cpus: type: string description: The number of CPUs to allocate for this service. It can include the SI suffix 'm', e.g. '500m' for 500 millicpus. Defaults to container defaults if unspecified. example: 500m pattern: ^[0-9]+(\.[0-9]{1,3}|m)?$ database_connection: $ref: '#/definitions/DatabaseConnection' host_ids: type: array items: type: string example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 description: The IDs of the hosts that should run this service. One service instance will be created per host. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string description: The amount of memory in SI or IEC notation to allocate for this service. Defaults to container defaults if unspecified. example: 512M maxLength: 16 orchestrator_opts: $ref: '#/definitions/OrchestratorOpts' port: type: integer description: The port to publish the service on the host. If 0, Docker assigns a random port. If unspecified, no port is published and the service is not accessible from outside the Docker network. example: 0 format: int64 minimum: 0 maximum: 65535 service_id: type: string description: The unique identifier for this service. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 service_type: type: string description: The type of service to run. example: rag enum: - mcp - postgrest - rag version: type: string description: The version of the service (e.g., '1.0.0', '14.5') or the literal 'latest'. example: latest pattern: ^(\d+\.\d+(\.\d+)?|latest)$ example: config: llm_model: gpt-4 llm_provider: openai openai_api_key: sk-... connect_as: app cpus: 500m database_connection: target_nodes: - n1 - n2 target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Incidunt in quas totam. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag version: latest required: - service_id - service_type - version - host_ids - connect_as StartInstanceResponse: title: StartInstanceResponse type: object properties: task: $ref: '#/definitions/Task' description: Returns a task representing the start operation. example: task: created_at: "2025-06-18T16:52:05Z" database_id: f2f1cae9-6f37-4609-aa98-d0991bff3493 instance_id: f2f1cae9-6f37-4609-aa98-d0991bff3493-n1-689qacsi status: pending task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: start_instance required: - task StopInstanceResponse: title: StopInstanceResponse type: object properties: task: $ref: '#/definitions/Task' description: Returns a task representing the stop operation. example: task: created_at: "2025-06-18T16:52:05Z" database_id: f2f1cae9-6f37-4609-aa98-d0991bff3493 instance_id: f2f1cae9-6f37-4609-aa98-d0991bff3493-n1-689qacsi status: pending task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: stop_instance required: - task SwarmOpts: title: SwarmOpts type: object properties: extra_labels: type: object description: Arbitrary labels to apply to the Docker Swarm service example: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) additionalProperties: type: string example: Voluptatem mollitia est. extra_networks: type: array items: $ref: '#/definitions/ExtraNetworkSpec' description: A list of additional Docker Swarm networks to attach containers in this database to. example: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public maxItems: 8 extra_volumes: type: array items: $ref: '#/definitions/ExtraVolumesSpec' description: A list of extra volumes to mount. Each entry defines a host and container path. example: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host maxItems: 16 image: type: string description: User-specified container image override. Bypasses manifest version constraints entirely — the CP will deploy this image without validating it against the version manifest. The CP verifies the image exists in its registry before accepting the spec. Clearing this field causes the CP to fall back to the manifest-resolved image on the next reconcile. example: Delectus dolorum fugit quo aut. description: Docker Swarm-specific options. example: extra_labels: traefik.enable: "true" traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) extra_networks: - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public - aliases: - pg-db - db-alias driver_opts: com.docker.network.endpoint.expose: "true" id: traefik-public extra_volumes: - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host image: Nostrum commodi. SwitchoverDatabaseNodeResponse: title: SwitchoverDatabaseNodeResponse type: object properties: task: $ref: '#/definitions/Task' example: task: created_at: "2025-06-18T17:54:28Z" database_id: storefront status: pending task_id: 0197842d-9082-7496-b787-77bd2e11809f type: switchover required: - task Task: title: Task type: object properties: completed_at: type: string description: The time when the task was completed. example: "2025-01-01T02:30:00Z" format: date-time created_at: type: string description: The time when the task was created. example: "2025-01-01T01:30:00Z" format: date-time database_id: type: string description: The database ID of the task. example: 02f1a7db-fca8-4521-b57a-2a375c1ced51 entity_id: type: string description: The entity ID (database_id or host_id) that this task belongs to. example: 02f1a7db-fca8-4521-b57a-2a375c1ced51 error: type: string description: The error message if the task failed. example: failed to connect to database host_id: type: string description: The ID of the host that the task is running on. example: 2e52dcde-86d8-4f71-b58e-8dc3a10c936a instance_id: type: string description: The ID of the instance that the task is operating on. example: 3c875a27-f6a6-4c1c-ba5f-6972fb1fc348 node_name: type: string description: The name of the node that the task is operating on. example: n1 parent_id: type: string description: The parent task ID of the task. example: 439eb515-e700-4740-b508-4a3f12ec4f83 format: uuid scope: type: string description: The scope of the task (database or host). example: database enum: - database - host status: type: string description: The status of the task. example: pending enum: - pending - running - completed - canceled - canceling - failed - unknown task_id: type: string description: The unique ID of the task. example: 3c875a27-f6a6-4c1c-ba5f-6972fb1fc348 format: uuid type: type: string description: The type of the task. example: restore example: completed_at: "2025-06-18T16:52:35Z" created_at: "2025-06-18T16:52:05Z" database_id: storefront entity_id: storefront scope: database status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create required: - scope - entity_id - task_id - created_at - type - status TaskLog: title: TaskLog type: object properties: database_id: type: string description: 'The database ID of the task log. Deprecated: use entity_id instead.' example: 02f1a7db-fca8-4521-b57a-2a375c1ced51 entity_id: type: string description: The entity ID (database_id or host_id) that this task log belongs to. example: 02f1a7db-fca8-4521-b57a-2a375c1ced51 entries: type: array items: $ref: '#/definitions/TaskLogEntry' description: Entries in the task log. example: - fields: option.enabled: true status: creating message: task started timestamp: "2025-05-29T15:43:13Z" - fields: option.enabled: true status: creating message: task started timestamp: "2025-05-29T15:43:13Z" - fields: option.enabled: true status: creating message: task started timestamp: "2025-05-29T15:43:13Z" - fields: option.enabled: true status: creating message: task started timestamp: "2025-05-29T15:43:13Z" last_entry_id: type: string description: The ID of the last entry in the task log. example: 3c875a27-f6a6-4c1c-ba5f-6972fb1fc348 scope: type: string description: The scope of the task (database or host). example: database enum: - database - host task_id: type: string description: The unique ID of the task log. example: 3c875a27-f6a6-4c1c-ba5f-6972fb1fc348 task_status: type: string description: The status of the task. example: pending enum: - pending - running - completed - failed - unknown - canceled - canceling example: entity_id: storefront entries: - message: refreshing current state timestamp: "2025-06-18T17:53:19Z" - fields: duration_ms: 8972 message: finished refreshing current state (took 8.972080116s) timestamp: "2025-06-18T17:53:28Z" - fields: host_id: host-1 resource_id: storefront-n1-689qacsi-backup resource_type: swarm.pgbackrest_config message: creating resource swarm.pgbackrest_config::storefront-n1-689qacsi-backup timestamp: "2025-06-18T17:53:29Z" - fields: host_id: host-2 resource_id: storefront-n2-9ptayhma-backup resource_type: swarm.pgbackrest_config message: creating resource swarm.pgbackrest_config::storefront-n2-9ptayhma-backup timestamp: "2025-06-18T17:53:29Z" - fields: duration_ms: 383 host_id: host-3 resource_id: n3 resource_type: swarm.pgbackrest_stanza success: true message: finished creating resource swarm.pgbackrest_stanza::n3 (took 383.568613ms) timestamp: "2025-06-18T17:54:02Z" - fields: duration_ms: 1181 host_id: host-1 resource_id: n1 resource_type: swarm.pgbackrest_stanza success: true message: finished creating resource swarm.pgbackrest_stanza::n1 (took 1.181454868s) timestamp: "2025-06-18T17:54:03Z" last_entry_id: 0197842d-303b-7251-b814-6d12c98e7d25 scope: database task_id: 0197842c-7c4f-7a8c-829e-7405c2a41c8c task_status: completed required: - scope - entity_id - task_id - task_status - entries TaskLogEntry: title: TaskLogEntry type: object properties: fields: type: object description: Additional fields for the log entry. example: option.enabled: true status: creating additionalProperties: true message: type: string description: The log message. example: task started timestamp: type: string description: The timestamp of the log entry. example: "2025-05-29T15:43:13Z" format: date-time example: fields: option.enabled: true status: creating message: task started timestamp: "2025-05-29T15:43:13Z" required: - timestamp - message UpdateDatabaseRequest: title: UpdateDatabaseRequest type: object properties: spec: $ref: '#/definitions/DatabaseSpec' tenant_id: type: string description: Unique identifier for the database's owner. example: 76f9b8c0-4958-11f0-a489-3bb29577c696 minLength: 1 maxLength: 36 example: spec: database_name: storefront database_users: - attributes: - LOGIN - SUPERUSER db_owner: true username: admin nodes: - backup_config: repositories: - s3_bucket: storefront-db-backups-us-east-1 type: s3 host_ids: - us-east-1 name: n1 - backup_config: repositories: - s3_bucket: storefront-db-backups-ap-south-1 type: s3 host_ids: - ap-south-1 name: n2 - backup_config: repositories: - s3_bucket: storefront-db-backups-eu-central-1 type: s3 host_ids: - eu-central-1 name: n3 restore_config: repository: s3_bucket: storefront-db-backups-us-east-1 type: s3 source_database_id: storefront source_database_name: storefront source_node_name: n1 port: 5432 required: - spec UpdateDatabaseResponse: title: UpdateDatabaseResponse type: object properties: database: $ref: '#/definitions/Database' task: $ref: '#/definitions/Task' example: database: created_at: "2025-06-18T16:52:05Z" id: storefront instances: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 created_at: "2025-06-18T16:52:22Z" host_id: us-east-1 id: storefront-n1-689qacsi node_name: n1 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n1n3 provider_node: n3 status: replicating - name: sub_n1n2 provider_node: n2 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-18T17:58:56Z" updated_at: "2025-06-18T17:54:36Z" - connection_info: addresses: - 10.24.35.2 - i-058731542fee493f.ec2.internal port: 5432 created_at: "2025-06-18T16:52:22Z" host_id: ap-south-1 id: storefront-n2-9ptayhma node_name: n2 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n2n1 provider_node: n1 status: replicating - name: sub_n2n3 provider_node: n3 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-18T17:58:56Z" updated_at: "2025-06-18T17:54:01Z" - connection_info: addresses: - 10.24.36.2 - i-494027b7b53f6a23.ec2.internal port: 5432 created_at: "2025-06-18T16:52:22Z" host_id: eu-central-1 id: storefront-n3-ant97dj4 node_name: n3 postgres: patroni_state: running role: primary version: "18.1" spock: read_only: "off" subscriptions: - name: sub_n3n1 provider_node: n1 status: replicating - name: sub_n3n2 provider_node: n2 status: replicating version: 4.0.10 state: available status_updated_at: "2025-06-18T17:58:56Z" updated_at: "2025-06-18T17:54:01Z" spec: database_name: storefront database_users: - attributes: - SUPERUSER - LOGIN db_owner: true username: admin nodes: - host_ids: - us-east-1 name: n1 - host_ids: - ap-south-1 name: n2 - host_ids: - eu-central-1 name: n3 port: 5432 postgres_version: "17.6" spock_version: "5" state: restoring updated_at: "2025-06-18T17:58:59Z" task: created_at: "2025-06-18T17:23:14Z" database_id: storefront status: pending task_id: 01978410-fb5d-7cd2-bbd2-66c0bf929dc0 type: update required: - task - database VersionInfo: title: VersionInfo type: object properties: arch: type: string description: The CPU architecture of the API server. example: amd64 revision: type: string description: The VCS revision of the API server. example: e89ae93b revision_time: type: string description: The timestamp associated with the revision. example: "2025-01-01T01:30:00Z" format: date-time version: type: string description: The version of the API server. example: 1.0.0 example: arch: amd64 revision: e89ae93b revision_time: "2025-01-01T01:30:00Z" version: 1.0.0 required: - version - revision - revision_time - arch