Настройка postgis (автоматическое заполнения пользователя и даты создания)
-
- Участник
- Сообщения: 72
- Зарегистрирован: 03 ноя 2017, 11:33
- Репутация: 5
- Откуда: Москва
Настройка postgis (автоматическое заполнения пользователя и даты создания)
Добрый вечер, коллеги!
Воспользовавшись мануалом http://gis-lab.info/qa/postgis-work.html я создал базу данных (postgres), загрузил слои, создал пользователей и раздал права. В принципе база полноценно работает, но хочется докрутить несколько важных функций. Серф в интернете быстрого ответа не дал, поэтому решил обратиться к сообществу.
Необходимо сделать автоматическое заполнение поля "person" - пользователь кто добавил/отредактировал объект и поля "date" - дата и время создания/редактирования объекта.
Я так понимаю нужно заполнить Trigger Function для каждой задачи.
Подскажите пожалуйста, что в них писать?
П.С. Спасибо за помощь
Воспользовавшись мануалом http://gis-lab.info/qa/postgis-work.html я создал базу данных (postgres), загрузил слои, создал пользователей и раздал права. В принципе база полноценно работает, но хочется докрутить несколько важных функций. Серф в интернете быстрого ответа не дал, поэтому решил обратиться к сообществу.
Необходимо сделать автоматическое заполнение поля "person" - пользователь кто добавил/отредактировал объект и поля "date" - дата и время создания/редактирования объекта.
Я так понимаю нужно заполнить Trigger Function для каждой задачи.
Подскажите пожалуйста, что в них писать?
П.С. Спасибо за помощь
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
-
- Участник
- Сообщения: 72
- Зарегистрирован: 03 ноя 2017, 11:33
- Репутация: 5
- Откуда: Москва
-
- Участник
- Сообщения: 72
- Зарегистрирован: 03 ноя 2017, 11:33
- Репутация: 5
- Откуда: Москва
Re: Настройка postgis (автоматическое заполнения пользователя и даты создания)
Все получилось, и поля заполняются автоматически при создании объектов. А как сделать что бы они заполнялись при редактировании?
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
-
- Участник
- Сообщения: 72
- Зарегистрирован: 03 ноя 2017, 11:33
- Репутация: 5
- Откуда: Москва
Re: Настройка postgis (автоматическое заполнения пользователя и даты создания)
Вообщем-то это мой первый эксперимент с развертыванием базы даных, по этому не судите строго. Никак не получается написать триггерную функцию.
Дано: слой test c столбцами : id (integer), geom (geometry), comment (character varying 80), user (character varying 80), time (timestamp with time zone);
столбцы :id и geom автоматически заполняются, столбцы user и time заполняются функциями.
За пример я взял вот этот код (Триггер, показанный в этом примере, при любом добавлении или изменении строки в таблице сохраняет в этой строке информацию о текущем пользователе и отметку времени. Кроме того, он требует, чтобы было указано имя сотрудника и зарплата задавалась положительным числом.)
Моя задача примерно такая же, проверить заполнен ли столбец comment и заполнить, кто и когда изменил запись. в идеале еще должна быть проверка по изменению геометрии. Правильный ли шаблон я выбрал? какие значения нужно подставить?
Дано: слой test c столбцами : id (integer), geom (geometry), comment (character varying 80), user (character varying 80), time (timestamp with time zone);
столбцы :id и geom автоматически заполняются, столбцы user и time заполняются функциями.
За пример я взял вот этот код (Триггер, показанный в этом примере, при любом добавлении или изменении строки в таблице сохраняет в этой строке информацию о текущем пользователе и отметку времени. Кроме того, он требует, чтобы было указано имя сотрудника и зарплата задавалась положительным числом.)
Код: Выделить всё
CREATE TABLE emp (
empname text,
salary integer,
last_date timestamp,
last_user text
);
CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$
BEGIN
-- Проверить, что указаны имя сотрудника и зарплата
IF NEW.empname IS NULL THEN
RAISE EXCEPTION 'empname cannot be null';
END IF;
IF NEW.salary IS NULL THEN
RAISE EXCEPTION '% cannot have null salary', NEW.empname;
END IF;
-- Кто будет работать, если за это надо будет платить?
IF NEW.salary < 0 THEN
RAISE EXCEPTION '% cannot have a negative salary', NEW.empname;
END IF;
-- Запомнить, кто и когда изменил запись
NEW.last_date := current_timestamp;
NEW.last_user := current_user;
RETURN NEW;
END;
$emp_stamp$ LANGUAGE plpgsql;
CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
FOR EACH ROW EXECUTE PROCEDURE emp_stamp();
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Настройка postgis (автоматическое заполнения пользователя и даты создания)
просто нужно сравнить записи NEW и OLD
-
- Участник
- Сообщения: 72
- Зарегистрирован: 03 ноя 2017, 11:33
- Репутация: 5
- Откуда: Москва
Re: Настройка postgis (автоматическое заполнения пользователя и даты создания)
почему то самолет не взлетает, вот код:
Вроде бы формула простая, ошибок не выдает, но колонки не обновляются. Подзкажите новичку, что не так?
Код: Выделить всё
BEGIN
if(NEW.comment <> OLD.comment) then
NEW.time := current_timestamp;
NEW.user := current_user;
END IF;
RETURN NEW;
END;
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 32 гостя