LINUX.ORG.RU

История изменений

Исправление 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();