Триггер Postgresql устанавливает пустую строку в NULL - PullRequest
2 голосов
/ 28 мая 2011

У меня есть таблица с полем "mac" типа MACADDR.Теперь я хотел бы рассмотреть ситуацию (возможно, с триггером?), Когда кто-то вставляет пустую строку вместо mac-адреса.Я хотел бы превратить эту пустую строку в NULL, поэтому postgresql не будет жаловаться: неверный синтаксис ввода для типа macaddr: ""

Теперь у меня есть функция триггера:

IF CHAR_LENGTH(NEW.mac) = 0 THEN
  NEW.mac := NULL;
END IF;

Но, похоже, не работает.Что бы вы сделали, если хотите обработать это на уровне БД?

Большое спасибо.-Ян

PS: Я новичок в постгрескле.Но очарованный:)

1 Ответ

5 голосов
/ 28 мая 2011

Вы не можете делать то, что вы хотите с триггером.Ваша входящая пустая строка будет проанализирована и преобразована в macaddr (или, по крайней мере, будет предпринят анализ) до запуска триггера.Тем не менее, вы можете написать простую функцию для преобразования пустых строк в NULL и использовать ее в INSERT:

create function macaddr_ify(m varchar) returns macaddr as $$
begin
    if m is null or length(m) = 0 then
        return null;
    end if;
    return cast(m as macaddr);
end;
$$ language plpgsql;

А затем:

insert into t (addr) values (macaddr_ify(str));

Я бы порекомендовал ваше клиентское приложениехотя правильно конвертируйте пустые строки MAC-адресов в NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...