Аналитика
https://geosystema.net/forum/

SQL
https://geosystema.net/forum/viewtopic.php?f=5&t=19623
Страница 2 из 2

Автор:  Dmitry_Zolotar [ 12 фев 2019 11:29 ]
Заголовок сообщения:  Re: SQL

В контекстном меню какой-либо базы в PGAdmin есть пункт Backup. Этот пункт меню для создания резервной копии всей базы.

Автор:  Руслан Пархуць [ 08 мар 2019 00:46 ]
Заголовок сообщения:  Re: SQL

Чи можна прибрати дане повiдомлення (колись його не було). У моєму випадку при роботi з базою для певних користувачiв заборонено змiнювати параметри деяких таблиць (зйомочних точок) за допомогою тригерної функцiї, чи є якiсь iншi варiанти для цього. Дякую.

Вложения:
01.jpg
01.jpg [ 16.81 Кб | Просмотров: 3569 ]

Автор:  Dmitry_Zolotar [ 11 мар 2019 11:16 ]
Заголовок сообщения:  Re: SQL

Руслан Пархуць писал(а):
Чи можна прибрати дане повiдомлення (колись його не було). У моєму випадку при роботi з базою для певних користувачiв заборонено змiнювати параметри деяких таблиць (зйомочних точок) за допомогою тригерної функцiї, чи є якiсь iншi варiанти для цього. Дякую.

Можливо Ви перекрили наш трігер, на кожен шар (таблицю в БД) створюється три тригера на усі події, фактично ведення лога операцій в таблиці _operations. Доповніть ці трігери.
У випадку бази PostGIS (SQLMode=1) можна окремо для геометрії (вся геометрия в таблиці _geom) окремо для семантики (таблиці Lxxx, де xxx - айді шару) можна надавати різні права користувачам за допомогою Grant wisard у PGAdmin, або SQL-команди GRANT

Автор:  Руслан Пархуць [ 11 мар 2019 21:33 ]
Заголовок сообщения:  Re: SQL

Dmitry_Zolotar писал(а):
Можливо Ви перекрили наш трігер, на кожен шар (таблицю в БД) створюється три тригера на усі події, фактично ведення лога операцій в таблиці _operations. Доповніть ці трігери.

Це я зрозумiв, але як менi заборонити запис на деякi таблицi (i вiдповiдно до логу, бо запису не буде). Я створюю також трiгер на кожну з таблиць, в якому прописую наступне
Код:
CREATE TRIGGER check_add_reclayer
  BEFORE INSERT OR UPDATE OR DELETE
  ON l11320000
  FOR EACH ROW
  EXECUTE PROCEDURE check_add_reclayer();
ну i сама функцiя обробки
Код:
CREATE OR REPLACE FUNCTION check_add_reclayer()
  RETURNS trigger AS
$BODY$
          BEGIN
                      IF (TG_OP = 'DELETE') THEN
               IF (current_user != OLD.login AND current_user != 'postgres' AND current_user != 'gis_admin') THEN
                     RETURN NULL;
                ELSE
                     RETURN OLD;
                END IF;
               ELSEIF (TG_OP = 'UPDATE') THEN
                 IF (current_user != OLD.login AND current_user != 'postgres' AND current_user != 'gis_admin') THEN
                     RETURN NULL;
                 ELSE --ELSEIF (current_user = 'postgres' OR current_user = 'gis_admin') THEN
                     NEW.login := current_user;
                  NEW.p9000 := current_user;
                         RETURN NEW;
                 END IF;
               ELSEIF (TG_OP = 'INSERT') THEN
                NEW.login := current_user;
         NEW.p9000 := current_user;
                RETURN NEW;
               END IF;
               RETURN NULL;
         END;
      $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION check_add_reclayer() OWNER TO postgres;

чи менi у кодi
Код:
CREATE OR REPLACE FUNCTION l11320000_insert_func()
  RETURNS trigger AS
$BODY$
DECLARE
BEGIN
INSERT INTO _operations(ln, objid, op, uid)
VALUES(
11320000,
new.objectid,
'I'::bpchar,
pg_backend_pid());
RETURN NEW;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION l11320000_insert_func() OWNER TO postgres;
перед INSERT робити перевiрку, i давати (забороняти) дозвiл користувачу на вставку, але що тодi записувати в таблицю _operations? Якщо нiчого не записувати, тодi знову буде вискакувати дана помилка, чи я щось не так розумiю. Дякую.

P.S. Якщо вставити в свою ф-цiю запис до таблицi operations (INSERT INTO _operations(ln, objid, op, uid)) для Insert, Update та Delete i витерти стандартнi тригери для обробки подiй, чи так буде вiрно?

Страница 2 из 2 Часовой пояс: UTC + 2 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/