我正在尝试创建一个使用 ltree 列的触发器。
CREATE EXTENSION IF NOT EXISTS ltree;
跑步
SELECT * FROM pg_catalog.pg_extension
给出以下输出:
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 的列而没有错误的表。
尝试创建触发器时,出现以下错误:
SQL Error [42704]: ERROR: type "ltree" does not exist
Position: 252
这是触发器的片段,当我声明一个 ltree 类型的变量时,问题似乎正在发生:
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 服务器都没有这个问题,并且使用相同的代码。
任何想法为什么会发生这种情况?
该扩展
ltree
安装在对象 ID 为 361964 的架构中。如果您想知道该架构的名称,请运行search_path
可能是当您执行该函数时该架构不在。这将解释错误。如果您在 以外的架构中安装扩展,
public
通常最好使用架构限定来引用其对象,例如