Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ External replication currently supports **BigQuery** as the managed destination.

We are working on new destinations. Availability may continue to vary based on the planned roll-out strategy.

## Which plans support external replication?

External replication is available on the Pro, Team, and Enterprise plans.

{/* supa-mdx-lint-disable-next-line Rule001HeadingCase */}

## What happened to Analytics Buckets replication?
Expand Down Expand Up @@ -153,6 +157,16 @@ Stopping replication causes changes to queue up in the WAL.

</Admonition>

## What happens if a project becomes inactive?

If your project becomes inactive, external replication stops any running pipelines and does not automatically resume them after the project is restarted.

After restarting the project, restart each replication pipeline manually from the [**Database > Replication**](/dashboard/project/_/database/replication) section of the Dashboard.

## What happens after a downgrade to the free plan?

When a project is downgraded to the Free Plan, all external replication pipelines for that project are deleted.

## What happens if a table is deleted at the destination?

If a table is deleted downstream at the destination, the behavior depends on the destination. In general, the replication pipeline will try to recreate the missing table so that all tables in your publication can continue replicating.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ subtitle: 'Customize local email templates via the config file.'

You can customize the email templates for local development by [editing the `config.toml` file](/docs/guides/local-development/cli/config#auth-config).

<Admonition type="note">

For configuring a self-hosted Supabase instance, see [Custom Email Templates](/docs/guides/self-hosting/custom-email-templates)

</Admonition>

## Configuring templates

You should provide a relative URL to the `content_path` parameter, pointing to an HTML file which contains the template. For example:
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/content/guides/platform/database-size.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -160,4 +160,4 @@ Disks don't automatically downsize during normal operation. Once you have [reduc

In case you have a large WAL directory, you may [modify WAL settings](/docs/guides/database/custom-postgres-config) such as `max_wal_size`. Use at your own risk as changing these settings can have side effects. To query your current WAL size, use `SELECT SUM(size) FROM pg_ls_waldir()`.

In the event that your project is already on the latest version of Postgres and cannot be upgraded, a new version of Postgres will be released approximately every week which you can then upgrade to once it becomes available.
In the event that your project is already on the latest version of Postgres and waiting for the next release to allow upgrading is a concern, you can migrate your database to a new project as an alternative following the [Migrating within Supabase guide](/docs/guides/platform/migrating-within-supabase).
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
title = "Managing GitHub Integration in Supabase Studio"
date_created = "2026-05-14T20:04:18+00:00"
topics = [ "platform" ]
keywords = [ "github", "integration", "oauth", "disconnect", "permissions", "branching" ]
---

The option to disconnect a GitHub account may be missing from Project or Organization settings, or permission errors may be displayed when trying to modify organization-level integrations. This happens because the GitHub integration is managed at three distinct levels — **Account**, **Organization**, and **Project** — and the underlying OAuth grant lives at the Account level.

## Where the GitHub connection is configured

### 1. Account preferences

In [Account Preferences](/dashboard/account/me) you authorize the GitHub OAuth app so Supabase can read your repositories. From here you can re-authenticate or remove the connection entirely.

### 2. Organization integration settings

In [Organization Integration Settings](/dashboard/org/_/integrations) you can see every project in the organization that is connected to a GitHub repository. From here you can:

- Open **Configure connection** to jump to the Project integration settings.
- Delete a connection to remove the link between a project and its GitHub repository. This does not revoke the underlying OAuth grant on the account level.

If your role only grants access to a subset of projects in the organization, the GitHub and Vercel sections of this page can return a permission error. See [Access Control — organization integration permissions](/docs/guides/platform/access-control#org-integration-permissions) for the required permissions.

### 3. Project integration settings

Project-level settings let you sync preview branches with a chosen GitHub branch, keep the production branch in sync, and automatically create a preview branch for every pull request.

## How to update or remove the connection

1. Go to [Account Preferences](/dashboard/account/me).
2. Find the **GitHub** integration section.
3. Click **Manage**, then **Remove connection**.
4. To link a different GitHub account or change the granted scope, re-initiate the GitHub connection flow from the project or organization where you want the new link to apply.

## Related guides

- [Access Control — organization integration permissions](/docs/guides/platform/access-control#org-integration-permissions)
- [Branching](/docs/guides/deployment/branching)
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
title = "PostgREST error: {PGRST002: Could not query the database for the schema cache}"
date_created = "2026-05-19T10:04:53+00:00"
topics = [ "database" ]
keywords = [ "postgrest" ]
[[errors]]
code = "PGRST002"
message = "Could not query the database for the schema cache"

---

A schema should first be removed from the **Exposed schemas** in Data API settings before dropping it from the database.

If you encounter a `PGRST002` error when making API requests, it can be that a schema still listed in the Data API configuration has been dropped from the database. PostgREST cannot build the schema cache if any schema defined in its `db_schemas` setting is missing.

**How to resolve this issue:**

1. Temporarily recreate the deleted schema to restore API connectivity.
2. Navigate to [Project Settings > Data API](/dashboard/project/_/settings/api).
3. Remove the target schema from the **Exposed Schemas** list and click **Save**.
4. Once the settings are saved, you can safely drop the schema from the database.

**Manual Overrides**

If you have manually executed `ALTER ROLE authenticator SET pgrst.db_schemas`, the Dashboard UI will no longer manage your schemas. You must manually update the role configuration:

```sql
ALTER ROLE authenticator SET pgrst.db_schemas = 'public, example_schema';
NOTIFY pgrst, 'reload config';
```
3 changes: 1 addition & 2 deletions apps/docs/public/humans.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ Chris Martin
Chris Stockton
Chris Ward
Christian Funkhouser
Claudiu Dragalina-Paraipan
Clayton Kast
Colin Goodheart-Smithe
Colin Murray
Expand Down Expand Up @@ -182,7 +183,6 @@ Maksym Ionutsa
Manuel Mendez
Manan Gupta
Marcus Weiner
Margarita Sandomirskaia
Marija Milicevic
Mark Burggraf
Matthew Hambright
Expand All @@ -194,7 +194,6 @@ Mats Kindahl
Mert Yerekapan
Michal Kleczek
Michelle Jubrey
Miles Thomas
Monica Khoury
Mykhailo Mischa Lieibenson
Natalie Roberge
Expand Down
150 changes: 148 additions & 2 deletions apps/docs/spec/api_v1_openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -6903,6 +6903,98 @@
"x-oauth-scope": "database:write"
}
},
"/v1/projects/{ref}/database/backups/schedule": {
"get": {
"operationId": "v1-get-backup-schedule",
"parameters": [
{
"name": "ref",
"required": true,
"in": "path",
"description": "Project ref",
"schema": {
"minLength": 20,
"maxLength": 20,
"pattern": "^[a-z]+$",
"example": "abcdefghijklmnopqrst",
"type": "string"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/V1BackupScheduleResponse" }
}
}
},
"401": { "description": "Unauthorized" },
"402": { "description": "Feature requires a higher plan" },
"403": { "description": "Forbidden action" },
"404": { "description": "Project or backup schedule not found" },
"429": { "description": "Rate limit exceeded" },
"500": { "description": "Failed to retrieve backup schedule" }
},
"security": [{ "bearer": [] }, { "fga_permissions": ["backups_read"] }],
"summary": "Gets the backup schedule for a project",
"tags": ["Database"],
"x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }],
"x-endpoint-owners": ["infra"],
"x-oauth-scope": "database:read"
},
"patch": {
"description": "Sets the time at which the daily backup runs. The change takes effect on the next backup window that includes the new time. If the new time has already passed for today, the first backup at the new time will occur the following day. It can only be updated 3 times per 24 hours.",
"operationId": "v1-update-backup-schedule",
"parameters": [
{
"name": "ref",
"required": true,
"in": "path",
"description": "Project ref",
"schema": {
"minLength": 20,
"maxLength": 20,
"pattern": "^[a-z]+$",
"example": "abcdefghijklmnopqrst",
"type": "string"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/V1UpdateBackupScheduleBody" }
}
}
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/V1BackupScheduleResponse" }
}
}
},
"400": { "description": "Invalid schedule_for format" },
"401": { "description": "Unauthorized" },
"402": { "description": "Feature requires a higher plan" },
"403": { "description": "Forbidden action" },
"404": { "description": "Project or backup schedule not found" },
"429": { "description": "Rate limit exceeded" },
"500": { "description": "Failed to update backup schedule" }
},
"security": [{ "bearer": [] }, { "fga_permissions": ["backups_write"] }],
"summary": "Updates the backup schedule time for a project",
"tags": ["Database"],
"x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }],
"x-endpoint-owners": ["infra"],
"x-oauth-scope": "database:write"
}
},
"/v1/projects/{ref}/database/backups/undo": {
"post": {
"operationId": "v1-undo",
Expand Down Expand Up @@ -7349,7 +7441,9 @@
"MIGRATIONS_FAILED",
"FUNCTIONS_DEPLOYED",
"FUNCTIONS_FAILED"
]
],
"description": "This field is deprecated. List action runs to get branch status instead.",
"deprecated": true
},
"created_at": { "type": "string", "format": "date-time" },
"updated_at": { "type": "string", "format": "date-time" },
Expand Down Expand Up @@ -8838,6 +8932,26 @@
"type": "object",
"properties": { "type": { "type": "string", "enum": ["x86_architecture"] } },
"required": ["type"]
},
{
"type": "object",
"properties": { "type": { "type": "string", "enum": ["project_hibernating"] } },
"required": ["type"]
}
]
}
},
"warnings": {
"type": "array",
"items": {
"discriminator": { "propertyName": "type" },
"oneOf": [
{
"type": "object",
"properties": {
"type": { "type": "string", "enum": ["pg_graphql_introspection_change"] }
},
"required": ["type"]
}
]
}
Expand All @@ -8854,7 +8968,8 @@
"objects_to_be_dropped",
"unsupported_extensions",
"user_defined_objects_in_internal_schemas",
"validation_errors"
"validation_errors",
"warnings"
]
},
"DatabaseUpgradeStatusResponse": {
Expand Down Expand Up @@ -12122,6 +12237,35 @@
"required": ["id"],
"example": { "id": 12345 }
},
"V1BackupScheduleResponse": {
"type": "object",
"properties": {
"schedule_for": {
"type": "string",
"description": "Time of day to schedule daily backups, in UTC. Format: HH:MM:SS.",
"example": "04:00:00"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Timestamp of when the backup schedule was last updated.",
"example": "2026-05-04T14:40:44+00:00"
}
},
"required": ["schedule_for", "updated_at"]
},
"V1UpdateBackupScheduleBody": {
"type": "object",
"properties": {
"schedule_for": {
"type": "string",
"description": "Time of day to schedule daily backups, in UTC. Format: HH:MM:SS.",
"example": "04:00:00"
}
},
"required": ["schedule_for"],
"example": { "schedule_for": "04:00:00" }
},
"V1UndoBody": {
"type": "object",
"properties": { "name": { "type": "string", "maxLength": 20 } },
Expand Down Expand Up @@ -12165,6 +12309,7 @@
"ipv4",
"pitr.available_variants",
"log_drains",
"audit_log_drains",
"branching_limit",
"branching_persistent",
"auth.mfa_phone",
Expand All @@ -12182,6 +12327,7 @@
"auth.custom_oauth.max_providers",
"backup.retention_days",
"backup.restore_to_new_project",
"backup.schedule",
"function.max_count",
"function.size_limit_mb",
"realtime.max_concurrent_users",
Expand Down
12 changes: 12 additions & 0 deletions apps/docs/spec/common-api-sections.json
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,12 @@
"slug": "v1-get-a-snippet",
"type": "operation"
},
{
"id": "v1-get-backup-schedule",
"title": "Get backup schedule",
"slug": "v1-get-backup-schedule",
"type": "operation"
},
{
"id": "v1-get-database-metadata",
"title": "Get database metadata",
Expand Down Expand Up @@ -376,6 +382,12 @@
"slug": "v1-setup-a-read-replica",
"type": "operation"
},
{
"id": "v1-update-backup-schedule",
"title": "Update backup schedule",
"slug": "v1-update-backup-schedule",
"type": "operation"
},
{
"id": "v1-update-database-password",
"title": "Update database password",
Expand Down
Loading
Loading