0

PostgreSQL8.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_usuarioPasswordますFecha_registro

誰か助けてくれませんか?

4

1 に答える 1

3

おそらく、大文字の名前につまずいたでしょう。それらを使用しないようにアドバイスすることにうんざりしていません。

おそらく、という名前の列があります

"Nombre_usuario"

二重引用符 ( "") で囲まれているため、大文字と小文字が混在したスペルが維持されます。
ただし、トリガー関数では次のように記述します。

NEW.Nombre_usuario

二重引用符なし。引用符で囲まれていない識別子は小文字に変換されます。したがって、これは次と同じです。

NEW.nombre_usuario

だがしかし:

NEW."Nombre_usuario"

大文字と小文字が混在する識別子は常に二重引用符で囲みます。または(はるかに良い)小文字の識別子のみを使用して開始し、問題を回避してください。(トリガー関数
の行の識別子は引用符で囲まれません。)NEW

参考文献:

于 2012-04-03T21:06:17.767 に答える