Страница 1 из 1

Добавление имени редактора и даты/времени редактирования

Добавлено: 05 фев 2014, 19:03
darsvid
Помогите пожалуйста разобраться,

задача в следующем: есть таблица с геометрией в PostgreSQL/PostGIS. Нескольким пользователям назначены привилегии добавлять в нее объекты (строки). Как сделать так, чтобы в специальные поля USER,TIME, DATE автоматически записывались имя пользователя, время внесения правки и дата соответственно. Помогите с формой запроса, чтобы:

1) создать поле - я попробовала вариант

Код: Выделить всё

ALTER TABLE table ADD user text;
но когда посмотрела его свойства в QGIS вышло, что его размер -1 и точность -1. Про дату/ время непонятно что писать.

2) объяснить, что если были внесены правки, то нужно эти поля заполнить автоматически. Опять же, пробовала исходя из примеров что-то слепить, но тут совсем глухо

Код: Выделить всё

CREATE OR REPLACE RULE add INSERT TO table INSERT INTO table (user) values (user);]

Re: Добавление имени редактора и даты/времени редактирования

Добавлено: 05 фев 2014, 19:06
trir
В MySQL я это делал тригерами

Re: Добавление имени редактора и даты/времени редактирования

Добавлено: 06 фев 2014, 22:39
Дмитрий Барышников
Например можно сделать так.
1. Предположим у нас есть таблица water_line в которой присутствуют таких 2 поля:

Код: Выделить всё

operator character varying(50),
date timestamp with time zone,
тогда можно создать вот такой триггер

Код: Выделить всё

CREATE OR REPLACE FUNCTION water_line_rep() RETURNS trigger AS $water_line_rep$
    BEGIN
		IF (TG_OP = 'INSERT') THEN
			NEW.operator := user;
			NEW.date := current_timestamp;
			
			RETURN NEW;
		ELSIF (TG_OP = 'UPDATE') THEN
			NEW.operator := user;
			NEW.date := current_timestamp;
			
			RETURN NEW;
		END IF;		
    END;
$water_line_rep$ LANGUAGE plpgsql;

CREATE TRIGGER water_line_rep BEFORE INSERT OR UPDATE ON water_line FOR EACH ROW EXECUTE PROCEDURE water_line_rep();
При добавлении или изменении записи в соответствующие поля будут записаны кто и когда это сделал.