класс ошибки TABLE_OR_VIEW_NOT_FOUND

SQLSTATE: 42P01

Не удается найти таблицу или представление <relationName> . Проверьте правильность и орфографию схемы и каталога.

Если вы не указали имя с помощью схемы, проверьте выходные данные current_schema() или укажите имя с помощью правильной схемы и каталога.

Чтобы допустить ошибку при удалении, используйте DROP VIEW IF EXISTS или DROP TABLE IF EXISTS.

Параметры

  • 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;