TABLE_OR_VIEW_NOT_FOUND felklass
Det går inte att hitta tabellen eller vyn <relationName>
. Kontrollera stavningen och korrektheten i schemat och katalogen.
Om du inte kvalificerade namnet med ett schema, verifiera resultatet av current_schema() eller kvalificera namnet med rätt schema och katalog.
För att tolerera fel vid borttagning, använd 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.
Detta liknar hur arbetskatalogen i filsystemet påverkar vilka filer du kan se, såvida du inte helt anger sökvägen.
Tillfälliga vyer eller vanliga tabelluttryck (CTE) finns bara i 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 felstavat.
- Objektet finns inte i det aktuella schemat.
- Användaren har ingen åtkomst till objektet och kan därför inte se det.
Förmildrande omständighet
Åtgärdandet av 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 ettUSE SCHEMA
kommando för att ange önskat implicit schema.Har du använt en tillfällig vy, men den var i en tidigare, utgången 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å uttalandet, så det visas överallt i uttalandet.
Vill du utfärda en DDL-instruktion, till exempel "DROP TABLE" ifall objektet skulle finnas?
Utfärda uttalandet 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?
Hänvisa till tabell och resolution för en detaljerad beskrivning av namnuppslagning.
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;