класс ошибки «TABLE_OR_VIEW_NOT_FOUND»
Не удается найти таблицу или представление <relationName>
. Проверьте орфографию и правильность схемы и каталога.
Если имя не задано схемой, проверьте выходные данные current_schema() или укажите имя с правильной схемой и каталогом.
Чтобы игнорировать ошибку при удалении, используйте DROP VIEW ЕСЛИ СУЩЕСТВУЕТ или DROP TABLE ЕСЛИ СУЩЕСТВУЕТ.
Параметры
- relationName: имя указанного отношения (таблицы или представления), которое не удается найти.
Объяснение
Сохраненные таблицы и представления состоят из трех частей имен: <catalog>.<schema>.<relation>
.
Если не указать все три части имени, оно неявно завершено с помощью текущего каталога или текущей схемы.
Это похоже на то, как рабочий каталог файловой системы влияет на файлы, которые вы видите, если вы не полностью укажете путь.
Временные представления или общие табличные выражения (CTE) существуют только в сеансе или запросе и никогда не должны быть квалифицированы.
Наиболее распространенными причинами, по которой не найти таблицу или представление, являются:
- Объект просто не существует.
- Имя объекта, схема или каталог были написаны с ошибкой.
- Объект не расположен в текущей схеме.
- Пользователь не имеет доступа к объекту и поэтому не видит его.
Смягчение
Устранение ошибки зависит от причины:
Неправильно ли вы написали имя таблицы или представления, схемы или каталога?
Исправьте орфографию.
Вы не полностью квалифицировали имя, и результат
VALUES current_schema()
не совпадает с полным именем таблицы или представления?Явно квалифицируйте
relationName
с помощью схемы и каталога или выполните командуUSE SCHEMA
, чтобы установить нужную неявную схему.Вы ссылались на временное представление, но это было в предыдущем, истекшем или ином сеансе?
Повторно создайте временное представление с помощью
CREATE TEMPORARY VIEW <relationName> …
или переключитесь на использование постоянного представления.вы ссылались на общее табличное выражение (CTE), но оно выходит за рамки?
Переместите определение CTE в самый внешний запрос. Это начало утверждения, поэтому оно видно везде в тексте утверждения.
Вы хотите выдать инструкцию DDL, например "DROP TABLE" только в случае существования объекта?
Выпустите заявление, используя предложение
IF EXISTS
, например:DROP TABLE <relationName> IF EXISTS
.Знаете ли вы, что объект существует, но его невозможно увидеть в
SHOW TABLE
?Обратитесь к администратору, чтобы получить доступ к таблице, предоставленной. Кроме того, может потребоваться доступ к схеме и каталогу.
Неясно, почему вы не можете определить таблицу или представление?
См. таблицу и разрешение для подробного описания разрешения имен.
Примеры
-- 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;