Skip to content

Instantly share code, notes, and snippets.

@matthewadams
Created June 8, 2025 12:01
Show Gist options
  • Save matthewadams/200217396bd6e9eb97b17db80ffadcc5 to your computer and use it in GitHub Desktop.
Save matthewadams/200217396bd6e9eb97b17db80ffadcc5 to your computer and use it in GitHub Desktop.
Raw SQL to effectively reset a Supabase project to the same state as when it was first created using SQL Editor; script created 2025-06-08, will need updates as supabase adds features
CREATE OR REPLACE FUNCTION reset_supabase_project()
RETURNS void
LANGUAGE plpgsql
AS '
DECLARE
r RECORD;
BEGIN
-- Drop all user-created tables in public schema
FOR r IN (
SELECT tablename FROM pg_tables
WHERE schemaname = ''public''
AND tablename NOT IN (''spatial_ref_sys'')
)
LOOP
EXECUTE ''DROP TABLE IF EXISTS public.'' || quote_ident(r.tablename) || '' CASCADE'';
END LOOP;
-- Drop all user-created views in public schema
FOR r IN (SELECT viewname FROM pg_views WHERE schemaname = ''public'')
LOOP
EXECUTE ''DROP VIEW IF EXISTS public.'' || quote_ident(r.viewname) || '' CASCADE'';
END LOOP;
-- Drop user-created functions in public schema
FOR r IN (
SELECT proname, oidvectortypes(proargtypes) as argtypes
FROM pg_proc p
JOIN pg_namespace n ON p.pronamespace = n.oid
WHERE n.nspname = ''public''
AND proname NOT LIKE ''st_%''
AND proname NOT LIKE ''postgis_%''
AND proname NOT LIKE ''_st_%''
)
LOOP
EXECUTE ''DROP FUNCTION IF EXISTS public.'' || quote_ident(r.proname) || ''('' || r.argtypes || '') CASCADE'';
END LOOP;
-- Drop user-created sequences in public schema
FOR r IN (SELECT sequencename FROM pg_sequences WHERE schemaname = ''public'')
LOOP
EXECUTE ''DROP SEQUENCE IF EXISTS public.'' || quote_ident(r.sequencename) || '' CASCADE'';
END LOOP;
-- Drop user-created types in public schema
FOR r IN (
SELECT typname FROM pg_type t
JOIN pg_namespace n ON t.typnamespace = n.oid
WHERE n.nspname = ''public''
AND t.typtype = ''c''
AND typname NOT LIKE ''geometry%''
AND typname NOT LIKE ''geography%''
)
LOOP
EXECUTE ''DROP TYPE IF EXISTS public.'' || quote_ident(r.typname) || '' CASCADE'';
END LOOP;
RAISE NOTICE ''✅ All user-created database objects have been dropped'';
END;
';
SELECT reset_supabase_project();
DROP FUNCTION IF EXISTS reset_supabase_project();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment