首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建扩展后不存在LTREE扩展

创建扩展后不存在LTREE扩展
EN

Database Administration用户
提问于 2019-12-05 16:23:07
回答 1查看 4.2K关注 0票数 3

我正在尝试创建一个使用ltree列的触发器。

代码语言:javascript
复制
CREATE EXTENSION IF NOT EXISTS ltree;

正在运行

代码语言:javascript
复制
SELECT * FROM pg_catalog.pg_extension 

给出以下输出:

代码语言:javascript
复制
extname     |extowner|extnamespace|extrelocatable|extversion|extconfig|extcondition|
------------|--------|------------|--------------|----------|---------|------------|
plpgsql     |      10|          11|false         |1.0       |NULL     |NULL        |
ltree       |      10|      361964|true          |1.1       |NULL     |NULL        |
postgres_fdw|      10|      361970|true          |1.0       |NULL     |NULL        |

我不能删除扩展,因为我得到了一个存在依赖项的错误。我还能够创建一个具有数据类型ltree的列的表,没有错误。

在尝试创建触发器时,我会得到以下错误:

代码语言:javascript
复制
SQL Error [42704]: ERROR: type "ltree" does not exist
  Position: 252

这是触发器的一个片段,当我声明ltree类型的变量时,问题似乎是触碰:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION asset.update_asset_path()

RETURNS TRIGGER

AS $
    DECLARE
        db_path_ltree ltree;
        single_asset INT;
        s3path TEXT = '';
        ltree_array TEXT[];
        v_asset_name TEXT;
        i_last_element INT;

令人困惑的是,这只发生在开发人员的一个环境中。其他每个postgres服务器都没有这个问题,并且使用相同的代码。

知道为什么会这样吗?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2019-12-05 16:30:55

扩展ltree安装在具有对象ID 361964的架构中。如果您想知道该架构的名称,请运行

代码语言:javascript
复制
SELECT 361964::regnamespace;

执行函数时,该模式可能不在search_path上。那就可以解释这个错误了。

如果在public以外的架构中安装扩展,通常最好使用架构限定引用其对象,例如

代码语言:javascript
复制
DECLARE
    db_path_ltree extschema.ltree;
票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/254917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档