Установлен дополнительный модуль citext, но тип "citext" не найден?

Я пытаюсь запустить встроенный запрос к моей базе данных - который имеет citext расширение установлено (используя CREATE EXTENSION) - и все же выполненный запрос продолжает выдавать эту ошибку при вызове функции:

type "citext" does not exist 
DO
LANGUAGE plpgsql
$$
DECLARE
  _id INT;
BEGIN
  SELECT * FROM "dbo"."MyFunction"(_id, 'some value'::citext);
END;
$$;

Если я опущу ::citext В ролях сказано:

function dbo.MyFunction(integer, unknown) does not exist.
You might need to add explicit type casts.

citext расширение добавлено, является частью схемы и работает с другими запросами. Это происходит случайно - что вызывает это?

РЕДАКТИРОВАТЬ: установленные расширения:

extname   | nspname
----------+-----------
plpgsql   | pg_catalog
citext    | public
uuid-ossp | public

Путь поиска:

show search_path;
search_path
-----------
dbo

1 ответ

Решение

Как и предполагалось, схема расширения отсутствует в search_path, Читайте о том, как установить путь поиска схемы в этом связанном ответе:

Похоже, ваш клиент устанавливает search_path = dbo на соединение, которое, кажется, неправильно настроено. dbo Что-то, что мы видим для SQL Server (раньше здесь была схема по умолчанию или все еще есть?), очень нетипично для Postgres. Не уверен, как ты туда попал.

Одной из альтернатив будет установка расширений в dbo схема также:

Вы даже можете переместить (большинство) расширений в другую схему:

ALTER EXTENSION citext SET SCHEMA dbo;

Но я бы посоветовал установить расширения для выделенной схемы и включить ее в search_path,

Покидать plpgsql один в любом случае. Он установлен по умолчанию и должен оставаться в pg_catalog,

Так или иначе, навести порядок с различными search_path Настройки.


Что касается второго вопроса: он руководствуется правилами разрешения типов функций. Вызов не может быть решен, потому что citext не имеет неявного приведения к text,

связанные с

Другие вопросы по тегам