PostgreSQL触发器异常



我在PostgreSQL 8.4中创建此触发器时遇到问题。

CREATE OR REPLACE FUNCTION tbi_Usuarios() RETURNS TRIGGER AS $tbi_Usuarios$
    BEGIN
        IF trim(both ' ' from NEW.Nombre_usuario) = '' OR NEW.Nombre_usuario IS NULL THEN
            RAISE EXCEPTION 'Debes ingresar un nombre de usuario.';
        END IF;
    IF NEW.Password = '' OR NEW.Password IS NULL THEN
        RAISE EXCEPTION 'Debes ingresar una contraseña correctamente';
    ELSE
        NEW.Password := md5(NEW.Password);
    END IF;
    IF Fecha_registro IS NULL THEN
        NEW.Fecha_registro := current_timestamp;
    END IF;
    RETURN NEW;
END;
$tbi_Usuarios$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS tr_tbi_Usuarios ON "Usuarios";
CREATE TRIGGER tr_tbi_Usuarios BEFORE INSERT ON "Usuarios"
FOR EACH ROW EXECUTE PROCEDURE tbi_Usuarios();

问题是,当我试图在数据库中插入一行时,会出现以下错误:

"el registro << new >> no tiene un campo << nombre_usuario >>"

或英文:

"the table << new >> doesn't have a column << nombre_usuario >>"

但在我的数据库中,我确实确信列Nombre_usuarioPasswordFecha_registro存在!

有人能帮我吗?

您很可能被大写名称绊倒了。我并不厌倦建议不要使用这些。

你可能有一个名为的专栏

"Nombre_usuario"

用双引号("")括起来,保留了混合大小写拼写
但在你的触发函数中,你写道:

NEW.Nombre_usuario

不带双引号。未引用的标识符转换为小写。这与相同

NEW.nombre_usuario

但不是:

NEW."Nombre_usuario"

总是双引号混合大小写标识符。或者(好得多)从一开始就只使用小写标识符,省去麻烦
(触发函数中NEW行的标识符从不被引用。)

进一步阅读:

  • PostgreSQL列名区分大小写吗?

  • 章节";标识符和关键字";在手动中

相关内容

  • 没有找到相关文章

最新更新