Re: freezing a particular field in a table

Поиск
Список
Период
Сортировка
От hubert depesz lubaczewski
Тема Re: freezing a particular field in a table
Дата
Msg-id 9e4684ce0511230128y77557be3k2507d6eb1575c1e4@mail.gmail.com
обсуждение исходный текст
Ответ на freezing a particular field in a table  (Ferindo Middleton Jr <fmiddleton@verizon.net>)
Ответы Re: freezing a particular field in a table
Список pgsql-admin
On 11/23/05, Ferindo Middleton Jr <fmiddleton@verizon.net> wrote:
Is there a way where you can implement a situation in a postgres table
where a particular field cannot be changed when saved initially. I have

CREATE OR REPLACE FUNCTION impossible_to_change() RETURNS TRIGGER AS
$BODY$
DECLARE
BEGIN
        IF
                (NEW.some_field IS NULL AND OLD.some_field IS NOT NULL)
                OR
                (NEW.some_field IS NOT NULL AND OLD.some_field IS NULL)
                OR
                (NEW.some_field IS NOT NULL AND OLD.some_field IS NOT NULL AND NEW.some_field <> OLD.some_field)
        THEN
                raise exception 'some_field cannod be changed!';
        END IF;
        RETURN NEW;
END;
$BODY$
LANGUAGE 'plpgsql';
CREATE TRIGGER impossible_to_change BEFORE UPDATE ON some_table FOR EACH ROW EXECUTE PROCEDURE impossible_to_change();

in this way - whenever somebody will try to alter the value, it will raise exception.
in case you dont want exceptions, and just want old value to stick (i would vote against it), then just change body of the function to:
DECLARE
BEGIN
NEW.some_field := OLD.some_field;
return NEW;
END;

will work.

depesz

В списке pgsql-admin по дате отправления:

Предыдущее
От: "Jason Minion"
Дата:
Сообщение: Re: freezing a particular field in a table
Следующее
От: Michael Fuhr
Дата:
Сообщение: Re: freezing a particular field in a table