我正在尝试创建一个使用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服务器都没有这个问题,并且使用相同的代码。
知道为什么会这样吗?
发布于 2019-12-05 16:30:55
扩展ltree安装在具有对象ID 361964的架构中。如果您想知道该架构的名称,请运行
SELECT 361964::regnamespace;执行函数时,该模式可能不在search_path上。那就可以解释这个错误了。
如果在public以外的架构中安装扩展,通常最好使用架构限定引用其对象,例如
DECLARE
db_path_ltree extschema.ltree;https://dba.stackexchange.com/questions/254917
复制相似问题