TABLE_OR_VIEW_NOT_FOUND felklass

SQLSTATE: 42P01

Det går inte att hitta tabellen eller vyn <relationName> . Kontrollera stavningen och korrektheten i schemat och katalogen.

Om du inte kvalificerar namnet med ett schema kontrollerar du utdata för current_schema() eller kvalificerar namnet med rätt schema och katalog.

Om du vill tolerera felet vid släpp använder du DROP VIEW IF EXISTS eller DROP TABLE IF EXISTS.

Parametrar

  • relationName: Namnet på den angivna relationen (tabell eller vy) som inte kan hittas.

Förklaring

Beständiga tabeller och vyer består av tre namndelar: <catalog>.<schema>.<relation>. Om du inte anger alla tre delarna av namnet slutförs det implicit med den aktuella katalogen eller det aktuella schemat. Det här liknar hur arbetskatalogen i filsystemet påverkar vilka filer du kan se, såvida du inte anger sökvägen fullständigt.

Tillfälliga vyer eller vanliga tabelluttryck (CTE) finns bara inom sessionen eller frågan och får aldrig kvalificeras.

Den vanligaste orsaken till att du inte hittar en tabell eller vy är:

  • Objektet finns helt enkelt inte.
  • Objektnamnet, schemat eller katalogen var felstavade.
  • Objektet finns inte i det aktuella schemat.
  • Användaren har ingen åtkomst till objektet och kan därför inte se det.

Lindring

Hur du åtgärdar felet beror på orsaken:

  • Stavade du tabellen eller vyn, schemat eller katalognamnet felaktigt?

    Korrigera stavningen.

  • Har du inte fullständigt kvalificerat namnet och resultatet av VALUES current_schema() matchar inte det kvalificerade namnet på tabellen eller vyn?

    Kvalificera uttryckligen relationName med dess schema och katalog, eller utfärda ett USE SCHEMA kommando för att ange önskat implicit schema.

  • Refererade du till en tillfällig vy, men den var i en tidigare, förfallen eller annan session?

    Återskapa den tillfälliga vyn med hjälp av CREATE TEMPORARY VIEW <relationName> …eller växla till med hjälp av en permanent vy.

  • Refererade du till ett vanligt tabelluttryck (CTE), men det ligger utanför omfånget?

    Flytta definitionen av CTE till den yttersta frågan. Det är början på -instruktionen, så den visas överallt i -instruktionen.

  • Vill du utfärda en DDL-instruktion, till exempel "DROP TABLE" om objektet finns?

    Utfärda -instruktionen med hjälp av IF EXISTS -satsen, till exempel: DROP TABLE <relationName> IF EXISTS.

  • Vet du att objektet finns, men du kan inte se det i SHOW TABLE?

    Kontakta administratören för att få åtkomst till den tilldelade tabellen. Detta kan också behöva inkludera åtkomst till schemat och katalogen.

  • Det är oklart varför du inte kan lösa tabellen eller vyn?

    En detaljerad beskrivning av namnmatchningen finns i Tabell- och vymatchning .

Exempel

-- The table is located in othercat.someschema
> SELECT count(*) FROM t;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `t` cannot be found.

> VALUES current_schema();
 default

-- Change the current schema
> USE SCHEMA othercat.someschema;
> SELECT count(*) FROM T;
 1

-- Alternatively qualify the table
> SELECT count(*) FROM othercat.someschema.t;
 1

-- A reference to a CTE in the wrong scope:
> SELECT count(1) FROM (WITH v(c1) AS (VALUES (1)) VALUES(2)) AS t(c1), v;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `v` cannot be found.

-- Move the CTE to top level
> WITH v(c1) AS (VALUES (1))
  SELECT count(1) FROM VALUES(2) AS t(c1), v;
 1

-- Dropping a non existing view
> DROP VIEW v;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `v` cannot be found.

> DROP VIEW IF EXISTS v;