安装了附加模块citext,但键入" citext"未找到?

时间:2016-09-01 02:18:09

标签: postgresql postgresql-9.3 search-path postgresql-extensions

我试图在我的数据库上运行内联查询 - 其中安装了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 个答案:

答案 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

相关