Database size
Database size refers to the monthly average storage usage, as reported by Postgres. This metric is reported in your organization's billing usage and is updated daily. As you read this document we will refer to "database size" and "disk size":
- "Database size" is the total size of used storage from your database.
- "Disk Storage size" describes the size of the underlying available storage.
Database space management
Database size
This SQL query will show the current size of your Postgres database:
_10select_10 sum(pg_database_size(pg_database.datname)) / (1024 * 1024) as db_size_mb_10from pg_database;
This value is reported in the database report page.
Database Space is consumed primarily by your data, indexes, and materialized views. You can reduce your disk size by removing any of these and running a Vacuum operation.
Depending on your billing plan, your database can go into read-only mode which can prevent you inserting and deleting data. There are instructions for managing read-only mode in the Disk Management section.
Vacuum operations
Postgres does not immediately reclaim the physical space used by dead tuples (i.e., deleted rows) in the DB. They are marked as "removed" until a vacuum operation is executed. As a result, deleting data from your database may not immediately reduce the reported disk usage. You can use the Supabase CLI inspect db bloat
command to view all dead tuples in your database. Alternatively, you can run the query found in the CLI's GitHub repo in the SQL Editor
_11# Login to the CLI_11npx supabase login_11_11# Initialize a local supabase directory_11npx supabase init_11_11# Link a project_11npx supabase link_11_11# Detect bloat_11npx supabase inspect db bloat --linked
If you find a table you would like to immediately clean, you can run the following in the SQL Editor:
_10vacuum full <table name>;
Vacuum operations can temporarily increase resource utilization, which may adversely impact the observed performance of your project until the maintenance is completed. The vacuum full command will lock the table until the operation concludes.
Supabase projects have automatic vacuuming enabled, which ensures that these operations are performed regularly to keep the database healthy and performant. It is possible to fine-tune the autovacuum parameters, or manually initiate vacuum operations. Running a manual vacuum after deleting large amounts of data from your DB could help reduce the database size reported by Postgres.
Preoccupied space
New Supabase projects have a database size of ~40-60mb. This space includes pre-installed extensions, schemas, and default Postgres data. Additional database size is used when installing extensions, even if those extensions are inactive.
Disk management
Supabase uses network-attached storage to balance performance with scalability. The behavior of your disk depends on your billing plan.
Paid plan behavior
Projects on the Pro plan and above have auto-scaling Disk Storage.
Disk Storage expands automatically when the database reaches 90% of the disk size. The disk is expanded to be 50% larger (e.g., 8GB -> 12GB). Auto-scaling can only take place once every 6 hours. If within those 6 hours you reach 95% of the disk space, your project will enter read-only mode.
The automatic resize operation will add an additional 50% capped to a maximum of 200GB. If 50% of your current usage is more than 200GB then only 200GB will be added to your disk (e.g. a size of 1500GB will resize to 1700GB).
The Disk Storage Size can also be manually expanded on the Database settings page. The maximum default you can expand the Disk Storage to is 200GB. If you wish to manually expand it to any more than 200GB, please contact us to discuss expanding the 200GB limit.
You may want to import a lot of data into your database which requires multiple disk expansions; for example, uploading more than 1.5x the current size of your database storage will put your database into read-only mode. If so, it is highly recommended you increase the Disk Storage Size manually on the Database settings page.
Due to provider restrictions, disk expansions can occur only once every six hours. During the six-hour window, the disk cannot be resized again.
Disks don't automatically downsize during normal operation. They will automatically "right-size" when a Supabase (or Postgres) update is applied. Their final size after the update is 1.2x the size of the database. For example, if your database is 100GB in size, and you have a 200GB disk, the size after a Supabase update will be 120GB.
The maximum Disk Storage Size for the Pro plan is 16TB. If you need more than this, contact us to learn more about the Enterprise plan.
Free plan behavior
Free Plan projects enter read-only mode when you exceed the 500MB limit. Once in read-only mode, you have several options:
- Upgrade to the Pro plan to increase the limit to 8GB. Disable the Spend Cap if you want your Pro instance to auto-scale and expand beyond the 8GB database size limit.
- Disable read-only mode and reduce your database size.
Read-only mode
In some cases Supabase may put your database into read-only mode to prevent your database from exceeding the billing or disk limitations.
In read-only mode, clients will encounter errors such as cannot execute INSERT in a read-only transaction
. Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size,
Disabling read-only mode
You manually override read-only mode to reduce disk size. To do this, run the following in the SQL Editor:
First, change the transaction access mode:
_10set session characteristics as transaction read write;
This allows you to delete data from within the session. After deleting data, consider running a vacuum to reclaim as much space as possible:
_10vacuum;
Once you have reclaimed space, you can run the following to disable read-only mode:
_10set default_transaction_read_only = 'off';