我想防止人们在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;
$$;
答案 0 :(得分:0)
只有超级用户和表所有者可以运行ALTER TABLE
。
由于不允许您的用户以超级用户身份登录(对吗?),因此您要做的就是将表的所有权更改为其他用户。然后向用户授予他们需要的表的所有权限。
使用触发器不是一个好的解决方案,因为表所有者可以删除触发器。
答案 1 :(得分:0)
尽管我找到了解决方案,但我使用的是ddl_command_end而不是ddl_command_start。
0