【问题标题】:PostgreSQL column "exists" does not existPostgreSQL 列“存在”不存在
【发布时间】:2022-01-24 21:05:38
【问题描述】:

我在 postgresql 中有一个函数的查询

EXECUTE FORMAT('SELECT * FROM riesgo.%I WHERE codigo = %L', TG_TABLE_NAME, NEW.codigo) INTO _colvar;
IF EXISTS _colvar THEN
    UPDATE riesgo.ro_agresion SET
        (nombre,creado_por,valor,activo) = 
        (NEW.nombre,NEW.creado_por,NEW.valor,NEW.activo)
    WHERE codigo = NEW.codigo;
ELSE
    RETURN NEW;
END IF;
RETURN NULL;

我得到了这个

ERROR:  column "exists" does not exist
LINE 1: SELECT EXISTS _colvar

【问题讨论】:

  • 您必须检查数据库中的列名是 [EXISTS] 还是 ["EXISTS"] !

标签: postgresql


【解决方案1】:

混淆错误的解释可以在manual for pl/pgsql Expressions中找到,其中解释:

当您编写 PL/pgSQL 语句时,IF expression THEN ... PL/pgSQL 将通过向主 SQL 引擎提供类似 SELECT expression 的查询来评估表达式

因此,在您的情况下,表达式被转换为 SELECT EXISTS _colvar,这在查询解析器中看起来就像一个名为“EXISTS”的列被赋予别名 _colvar”。

要修复它,您需要在选择列表中有效的内容。例如:

IF _colvar IS NOT NULL ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多