AI & Agent Dev Bug Sandbox logo
AI & Agent Dev Bug Sandbox
Back to Radar

Management API Upgrade POST Returns 201 But Creates No Observable Upgrade Status

The Supabase Management API accepts a Postgres upgrade request with HTTP 201 and returns a tracking_id, but no upgrade status record is created. Status endpoints return databaseUpgradeStatus: null indefinitely, and the database remains on the old version. Users cannot determine if the orchestration job is queued, failed, or safe to retry.

highConfidence 73%Node.js

Origin Analysis

The upgrade endpoint enqueues an asynchronous orchestration task and returns 201 before atomically persisting a tracking record. If the tracking record insertion or queue publication fails after the response is committed, the returned tracking_id has no backing state, causing status APIs to return null.
1. Hosted project on older Postgres 17 patch. 2. GET /v1/projects/{ref}/upgrade/eligibility returns eligible true without blockers. 3. POST /v1/projects/{ref}/upgrade with target_version and release_channel from eligibility. 4. Receive HTTP 201 with non-empty tracking_id. 5. Poll GET /v1/projects/{ref}/upgrade/status?tracking_id=... and GET /v1/projects/{ref}/upgrade/status. 6. Observe databaseUpgradeStatus: null and database version unchanged after estimated duration.

Fixing Code Block

Edge Case Audit

Requires a database migration to create the database_upgrade_status table or ensure columns. Historical orphaned tracking IDs from before the fix remain unresolved and will still return null. Deploying while an upgrade is in progress could create duplicate active records if no unique partial index exists; add one on project_ref where status in ('queued','running'). Do not roll back mid-upgrade; verify status before downgrade.

Ecosystem Topology