Resolving 42P01: relation does not exist error
Last edited: 1/16/2025
42P01
is a Postgres level error, that can also be found in the PostgREST error docs
_1042P01: relation "<some table name>" does not exist
There are a few possible causes
Cause 1: Search path broken
When directly accessing a table that is not in the public
schema, it's important to reference the external schema explicitly in your query. Below is an example from the JS client:
_10const { data, error } = await supabase.schema('myschema').from('mytable').select()
If after calling the table directly, you get a 42501
permission denied error, then you must also expose the custom schema to the API.. For Supabase managed schemas, such as vault
and auth
, these cannot be directly accessed through the DB REST API for security reasons. If necessary, they can be strictly accessed through security definer functions.
Cause 2: Ignoring capitalization and other typos
The table could be defined as: CREATE TABLE “Hello”`. The double quotes make it case-sensitive, so it becomes essential to call the table with the appropriate title. It is possible to change the table name to be lowercase for convenience, either in the Table Editor, or with raw SQL:
_10alter table "Table_name"_10rename to table_name;
Cause 3: Table or function actually does not exist
One may have never made the table or dropped it deliberately or accidentally. This can be quickly checked with the following query:
_10-- For tables_10SELECT * FROM information_schema.tables_10WHERE table_name ILIKE 'example_table'; --<------ Add relevant table name
_10-- For functions_10select_10 p.proname as function_name,_10 n.nspname as schema_name,_10 pg_get_functiondef(p.oid) as function_definition_10from_10 pg_proc as p_10 join pg_namespace as n on p.pronamespace = n.oid_10where n.nspname in ('public', 'your custom schema') -- <------ Add other relevant schemas_10order by n.nspname, p.proname;