我试图在我的数据库上运行内联查询 - 其中安装了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
答案 0 :(得分: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
。
相关