1

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

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, является частью схемы и работает с другими запросами. Это неудивительно: почему это происходит?

EDIT: Установленные расширения:

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

путь поиска:

show search_path; 
search_path 
----------- 
dbo 
+0

'CITEXT ... является частью schema' - часть какой схеме? Выполнить: 'SELECT e.extname, n.nspname FROM pg_extension e JOIN pg_namespace n ON n.oid = e.extnamespace;' И что вы получаете за 'show search_path'? –

+0

обновленный вопрос, чтобы отразить эту информацию. Интересно отметить, что мне также кажется, что эта проблема пытается использовать uuid_generate_v4() в встроенном запросе. –

+0

oh man .. это может быть специфично для DataGrip 2016 и того, как он инициирует соединения. Я попробовал один и тот же запрос с pgAdmin, а search_path содержит расширения, тогда как в DataGrip он отсутствует. –

ответ

1

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

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

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

Вы можете даже move (most) extensions to a different schema:

ALTER EXTENSION citext SET SCHEMA dbo; 

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

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

Так или иначе, очищайте беспорядок с меняющимися настройками search_path.


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

Связанные

Смежные вопросы