Установлен дополнительный модуль 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
,
связанные с