diff --git a/apps/docs/content/guides/database/postgres/triggers.mdx b/apps/docs/content/guides/database/postgres/triggers.mdx
index e405dfff54943..81cc59964aaef 100644
--- a/apps/docs/content/guides/database/postgres/triggers.mdx
+++ b/apps/docs/content/guides/database/postgres/triggers.mdx
@@ -109,6 +109,14 @@ You can delete a trigger using the `drop trigger` command:
drop trigger "trigger_name" on "table_name";
```
+If your trigger is inside a restricted schema, you won't be able to drop it due to permission restrictions. In those cases, you can drop the function it depends on instead using the CASCADE clause to automatically remove all triggers that call it:
+
+```sql
+drop function if exists restricted_schema.function_name() cascade;
+```
+
+Make sure you take a backup of the function before removing it in case you're planning to recreate it later.
+
## Resources
- Official Postgres Docs: [Triggers](https://www.postgresql.org/docs/current/triggers.html)
diff --git a/apps/docs/content/guides/integrations/vercel-marketplace.mdx b/apps/docs/content/guides/integrations/vercel-marketplace.mdx
index 6a16f263f81a8..2db3ac8df8013 100644
--- a/apps/docs/content/guides/integrations/vercel-marketplace.mdx
+++ b/apps/docs/content/guides/integrations/vercel-marketplace.mdx
@@ -94,7 +94,8 @@ Note: Supabase Organization billing cycle is separate from Vercel's. Plan change
When using Vercel Marketplace, the following limitations apply:
-- Projects can only be created or removed via the Vercel dashboard.
+- Projects can only be created via the Vercel dashboard.
- Organizations cannot be removed manually; they are removed only if you uninstall the Vercel Marketplace Integration.
- Owners cannot be added manually within the Supabase dashboard.
- Invoices and payments must be managed through the Vercel dashboard, not the Supabase dashboard.
+- [Custom Domains](/docs/guides/platform/custom-domains) are not supported, and we always use the base `SUPABASE_URL` for the Vercel environment variables.
diff --git a/apps/docs/content/guides/platform/backups.mdx b/apps/docs/content/guides/platform/backups.mdx
index b18781e0ec7e7..55b43ec5041c0 100644
--- a/apps/docs/content/guides/platform/backups.mdx
+++ b/apps/docs/content/guides/platform/backups.mdx
@@ -26,7 +26,7 @@ Database backups can be categorized into two types: **logical** and **physical**
To enable physical backups, you have three options:
- Enable [Point-in-Time Recovery (PITR)](#point-in-time-recovery)
-- [Increase your disk size](/docs/guides/platform/database-size) to greater than 15GB
+- [Increase your database size](/docs/guides/platform/database-size) to greater than 15GB
- [Create a read replica](/docs/guides/platform/read-replicas)
Once a project satisfies at least one of the requirements for physical backups then logical backups are no longer made. However, your project may revert back to logical backups if you remove add-ons.
diff --git a/apps/studio/components/interfaces/Auth/Overview/OverviewUsage.constants.ts b/apps/studio/components/interfaces/Auth/Overview/OverviewUsage.constants.ts
index 0e858125dfa3d..eb9977bf3f9f8 100644
--- a/apps/studio/components/interfaces/Auth/Overview/OverviewUsage.constants.ts
+++ b/apps/studio/components/interfaces/Auth/Overview/OverviewUsage.constants.ts
@@ -15,6 +15,7 @@ export const getDateRanges = () => {
}
export const AUTH_COMBINED_QUERY = () => `
+-- auth-overview
with base as (
select
json_value(event_message, "$.auth_event.action") as action,
diff --git a/apps/studio/components/interfaces/Auth/Overview/OverviewUsage.tsx b/apps/studio/components/interfaces/Auth/Overview/OverviewUsage.tsx
index 2c2e7f9c22aa2..4fd3fd697ba22 100644
--- a/apps/studio/components/interfaces/Auth/Overview/OverviewUsage.tsx
+++ b/apps/studio/components/interfaces/Auth/Overview/OverviewUsage.tsx
@@ -25,6 +25,7 @@ import {
} from './OverviewUsage.constants'
import { useQuery } from '@tanstack/react-query'
import dayjs from 'dayjs'
+import AlertError from 'components/ui/AlertError'
export const StatCard = ({
title,
@@ -95,13 +96,21 @@ export const StatCard = ({
export const OverviewUsage = () => {
const { ref } = useParams()
- const { data: currentData, isLoading: currentLoading } = useQuery({
+ const {
+ data: currentData,
+ isLoading: currentLoading,
+ error: currentError,
+ } = useQuery({
queryKey: ['auth-metrics', ref, 'current'],
queryFn: () => fetchAllAuthMetrics(ref as string, 'current'),
enabled: !!ref,
})
- const { data: previousData, isLoading: previousLoading } = useQuery({
+ const {
+ data: previousData,
+ isLoading: previousLoading,
+ error: previousError,
+ } = useQuery({
queryKey: ['auth-metrics', ref, 'previous'],
queryFn: () => fetchAllAuthMetrics(ref as string, 'previous'),
enabled: !!ref,
@@ -109,6 +118,11 @@ export const OverviewUsage = () => {
const metrics = processAllAuthMetrics(currentData?.result || [], previousData?.result || [])
const isLoading = currentLoading || previousLoading
+ const isError = !!previousError || !!currentError
+ const errorMessage =
+ (previousError as any)?.message ||
+ (currentError as any)?.message ||
+ 'There was an error fetching the auth metrics.'
const activeUsersChange = calculatePercentageChange(
metrics.current.activeUsers,
@@ -124,6 +138,15 @@ export const OverviewUsage = () => {
return (
+ {isError && (
+
+ )}