Как мне остановить добавление столбца в несколько таблиц в Postgres 9.6? - PullRequest
0 голосов
/ 26 июня 2019

Я хочу, чтобы люди не добавляли / не отбрасывали столбец в 3-4 таблицы.Они должны связаться с моей командой перед добавлением / удалением столбца.Я знаю, для этого мне нужно использовать event_trigger.Когда я создал event_trigger, он блокирует добавление столбца в любую таблицу, я знаю, что с логикой что-то не так, но не могу понять это.Короче говоря, «Изменить столбец добавления / удаления столбцов» - это то, что я хочу предотвратить.

CREATE OR REPLACE FUNCTION schema.abort_adding_column()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$

DECLARE
obj record;

BEGIN
For obj IN SELECT * FROM information_schema.tables AND table_schema IN ('schema1') AND table_catalog = 'database1';
LOOP
RAISE EXCEPTION 'command % is not allowed on %s, see blah blah for more details.', tg_tag;
END LOOP;
END;
$$;

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Я нашел решение, хотя, я использую ddl_command_end вместо ddl_command_start.

CREATE OR REPLACE FUNCTION schema.abort_adding_column()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
DECLARE
obj record;
BEGIN
FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands()
LOOP
IF  obj.object_identity in ('schema1.table1', 'schema2.table2') AND obj.schema_name in ('schema1', 'schema2')
THEN
RAISE EXCEPTION 'command % is not allowed on % in % schema in the blah blah ', tg_tag, obj.object_identity, obj.schema_name;
END IF;
END LOOP;
END;
$$;


CREATE EVENT TRIGGER abort_ddl ON ddl_command_end
EXECUTE PROCEDURE schema.abort_adding_column();
0 голосов
/ 26 июня 2019

Только суперпользователь и владелец таблицы могут запускать ALTER TABLE.

Поскольку ваши пользователи не могут войти в систему как суперпользователь (верно?), Все, что вам нужно сделать, это изменить владельца таблиц надругой пользователь.Затем предоставьте пользователям все необходимые разрешения для таблиц.

Использование триггера не является хорошим решением, поскольку владелец таблицы может просто сбросить триггер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...