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

Ответить
Аватара пользователя
darsvid
Активный участник
Сообщения: 163
Зарегистрирован: 29 июн 2012, 12:40
Репутация: 115
Откуда: Kyїv, Ukraine
Контактная информация:

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

Сообщение darsvid » 05 фев 2014, 19:03

Помогите пожалуйста разобраться,

задача в следующем: есть таблица с геометрией в 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);]

trir
Гуру
Сообщения: 5292
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 05 фев 2014, 19:06

В MySQL я это делал тригерами

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

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();
При добавлении или изменении записи в соответствующие поля будут записаны кто и когда это сделал.

Ответить

Вернуться в «PostGIS/PostgreSQL»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 25 гостей