Resolving 42P01: relation does not exist error #29577
TheOtherBrian1
announced in
Troubleshooting
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
42P01
is a Postgres level error, that can also be found in the PostgREST error docs](https://postgrest.org/en/v12/references/errors.html)42P01: relation "<some table name>" does not exist
There are a few possible causes
Cause 1: Schema cache failed to update
PostgREST has an
NOTIFY/LISTEN
event trigger that listens forCREATE
,UPDATE
, andALTER
commands within Postgres. This allows Postgres to inform the API server when it should update the API endpoints. Although very rare, sometimes, the trigger may fail to update the API.Solution:
Manually refresh cache with the below query:
NOTIFY pgrst, 'reload config';
Cause 2: 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: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 asvault
andauth
, 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 3: 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:
Cause 4: 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:
Beta Was this translation helpful? Give feedback.
All reactions