Настройка postgis (автоматическое заполнения пользователя и даты создания)

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Dezmond
Участник
Сообщения: 72
Зарегистрирован: 03 ноя 2017, 11:33
Репутация: 5
Откуда: Москва

Настройка postgis (автоматическое заполнения пользователя и даты создания)

Сообщение Dezmond » 24 дек 2018, 18:47

Добрый вечер, коллеги!
Воспользовавшись мануалом http://gis-lab.info/qa/postgis-work.html я создал базу данных (postgres), загрузил слои, создал пользователей и раздал права. В принципе база полноценно работает, но хочется докрутить несколько важных функций. Серф в интернете быстрого ответа не дал, поэтому решил обратиться к сообществу.
Необходимо сделать автоматическое заполнение поля "person" - пользователь кто добавил/отредактировал объект и поля "date" - дата и время создания/редактирования объекта.
Я так понимаю нужно заполнить Trigger Function для каждой задачи.
Подскажите пожалуйста, что в них писать?
П.С. Спасибо за помощь

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

Re: Настройка postgis (автоматическое заполнения пользователя и даты создания)

Сообщение trir » 24 дек 2018, 19:30


Dezmond
Участник
Сообщения: 72
Зарегистрирован: 03 ноя 2017, 11:33
Репутация: 5
Откуда: Москва

Re: Настройка postgis (автоматическое заполнения пользователя и даты создания)

Сообщение Dezmond » 24 дек 2018, 19:53

Спасибо! :)

Dezmond
Участник
Сообщения: 72
Зарегистрирован: 03 ноя 2017, 11:33
Репутация: 5
Откуда: Москва

Re: Настройка postgis (автоматическое заполнения пользователя и даты создания)

Сообщение Dezmond » 25 дек 2018, 11:08

Все получилось, и поля заполняются автоматически при создании объектов. А как сделать что бы они заполнялись при редактировании?

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

Re: Настройка postgis (автоматическое заполнения пользователя и даты создания)

Сообщение trir » 25 дек 2018, 11:22


Dezmond
Участник
Сообщения: 72
Зарегистрирован: 03 ноя 2017, 11:33
Репутация: 5
Откуда: Москва

Re: Настройка postgis (автоматическое заполнения пользователя и даты создания)

Сообщение Dezmond » 25 дек 2018, 13:51

Вообщем-то это мой первый эксперимент с развертыванием базы даных, по этому не судите строго. Никак не получается написать триггерную функцию.
Дано: слой 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();
Моя задача примерно такая же, проверить заполнен ли столбец comment и заполнить, кто и когда изменил запись. в идеале еще должна быть проверка по изменению геометрии. Правильный ли шаблон я выбрал? какие значения нужно подставить?

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

Re: Настройка postgis (автоматическое заполнения пользователя и даты создания)

Сообщение trir » 25 дек 2018, 13:58

просто нужно сравнить записи NEW и OLD

Dezmond
Участник
Сообщения: 72
Зарегистрирован: 03 ноя 2017, 11:33
Репутация: 5
Откуда: Москва

Re: Настройка postgis (автоматическое заполнения пользователя и даты создания)

Сообщение Dezmond » 26 дек 2018, 13:05

почему то самолет не взлетает, вот код:

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

BEGIN
        if(NEW.comment <> OLD.comment) then
           NEW.time := current_timestamp;
           NEW.user := current_user;
           END IF;
        RETURN NEW;
    END;
Вроде бы формула простая, ошибок не выдает, но колонки не обновляются. Подзкажите новичку, что не так?

Ответить

Вернуться в «QGIS»

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

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