История изменений
Исправление theNamelessOne, (текущая версия) :
Триггером же. Как-то так:
CREATE FUNCTION restrict_row_updates_if_archived()
RETURNS trigger AS
$$
BEGIN
IF OLD.isArchive THEN
RAISE EXCEPTION 'Cannot update archived row';
END IF;
RETURN NEW;
$$ LANGUAGE plpgsql;
CREATE TRIGGER make_my_table_archived_row_immutable
BEFORE UPDATE
ON my_table
FOR EACH ROW
WHEN (OLD.* IS DISTINCT FROM NEW.*)
EXECUTE PROCEDURE restrict_row_updates_if_archived();
(для одного и того же пользователя)
Что это значит?
Исправление theNamelessOne, :
Триггером же. Как-то так:
CREATE FUNCTION restrict_row_updates_if_archived()
RETURNS trigger AS
$$
BEGIN
IF OLD.isArchive THEN
RAISE EXCEPTION 'Cannot update archived row';
END IF;
RETURN NEW;
$$ LANGUAGE plpgsql;
CREATE TRIGGER make_my_table_archived_row_immutable
BEFORE UPDATE
ON my_table
FOR EACH ROW
EXECUTE PROCEDURE restrict_row_updates_if_archived();
(для одного и того же пользователя)
Что это значит?
Исходная версия theNamelessOne, :
Триггером же. Как-то так:
CREATE FUNCTION restrict_row_updates_if_archived()
RETURNS trigger AS
$$
BEGIN
IF OLD.isArchive THEN
RAISE EXCEPTION 'Cannot update archived row';
END IF;
RETURN NEW;
$$ LANGUAGE plpgsql;
CREATE TRIGGER make_my_table_archived_row_immutable
BEFORE UPDATE
ON my_table
FOR EACH ROW
EXECUTE PROCEDURE restrict_row_updates_if_archived();