Аналитика 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анти для цього. Дякую.
|
Автор: | 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 ну i сама функцiя обробки BEFORE INSERT OR UPDATE OR DELETE ON l11320000 FOR EACH ROW EXECUTE PROCEDURE check_add_reclayer(); Код: 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() перед INSERT робити перевiрку, i давати (забороняти) дозвiл користувачу на вставку, але що тодi записувати в таблицю _operations? Якщо нiчого не записувати, тодi знову буде вискакувати дана помилка, чи я щось не так розумiю. Дякую.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; 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/ |