PostgreSQL Trigger Exception - PullRequest
       32

PostgreSQL Trigger Exception

0 голосов
/ 23 марта 2012

У меня проблемы с созданием этого триггера в 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 существуют!

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

2 голосов
/ 04 апреля 2012

Скорее всего, вы запутались в верхнем регистре имен. Я не устаю советовать им не пользоваться.

Возможно, у вас есть столбец с именем

"Nombre_usuario"

заключено в двойные кавычки (""), которые сохраняют орфографию в смешанном регистре.
Но в вашей триггерной функции вы пишете:

NEW.Nombre_usuario

без двойных кавычек . Идентификаторы без кавычек преобразуются в нижний регистр. Так что это так же, как:

NEW.nombre_usuario

но не:

NEW."Nombre_usuario"

Всегда заключайте в двойные кавычки идентификаторы. Или (что гораздо лучше) для начала используйте исключительно строчные идентификаторы и избавьте себя от проблем.

Начните с прочтения главы «Идентификаторы и ключевые слова» в руководстве.

...