postgresql - 附加模块 citext 已安装,但未找到类型 "citext"?

标签 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

最佳答案

正如怀疑的那样,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

相关

关于postgresql - 附加模块 citext 已安装,但未找到类型 "citext"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39261729/

相关文章:

sql - 如何在 PostgreSQL 中使用(安装)dblink?

python - 如何获取()这个属于 userprofile.team 的模型

python - 运行时实体上的 sqlalchemy 动态模式

linker - 运行时链接器忽略 Solaris 上可执行文件中的 RPATH

postgresql - Postgres : authentication fails when try to login with different unix user

postgresql - Postgres pg_trgm 模块中的相似度是如何计算的

PostgreSQL 9.3 : Pass more than 100 arguments to `REPLACE` function

function - 如何在 PostgreSQL 中使用函数插入多行

Matlab:搜索路径已锁定以供编辑?