我在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_usuario
,Password
,Fecha_registro
存在!
有人可以帮我吗?
答案 0 :(得分:2)
你最有可能绊倒大写名字。我并不厌倦建议不要使用它们。
您可能有一个名为
的列"Nombre_usuario"
用双引号(""
)括起来,保留混合大小写拼写
但是在你的触发函数中你写道:
NEW.Nombre_usuario
没有双引号。不带引号的标识符将转换为小写。所以这与:
相同NEW.nombre_usuario
但不是:
NEW."Nombre_usuario"
始终双引号混合大小写标识符。或者(更好)专门使用小写标识符开始并省去麻烦。
首先阅读手册中的"Identifiers and Key Words"章节。