PostgreSQL触发异常
问题描述:
我在与PostgreSQL中8.4创建这个触发器问题。PostgreSQL触发异常
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
存在!
谁能帮助我吗?
答
你最有可能绊倒大写的名字。我并不厌倦建议不要使用这些。
你可能有一个名为
"Nombre_usuario"
用双引号(""
),它保留了大小写混合的拼写列。
但在你的触发功能你写:
NEW.Nombre_usuario
没有双引号。未加引号的标识符将转换为小写。因此,这是一样的:
NEW.nombre_usuario
但不是:
NEW."Nombre_usuario"
总是双引号大小写混合的标识符。或者(更好)专门使用小写标识符开始,并节省您的麻烦。
开始通过阅读手册中的一章"Identifiers and Key Words"。
谢谢!有效! – KGs 2013-04-13 15:58:22