如何阻止任何人在Postgres 9.6的几个表中添加列?

时间:2019-06-26 15:02:12

标签: sql postgresql function triggers

我想防止人们在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 :(得分:0)

只有超级用户和表所有者可以运行ALTER TABLE

由于不允许您的用户以超级用户身份登录(对吗?),因此您要做的就是将表的所有权更改为其他用户。然后向用户授予他们需要的表的所有权限。

使用触发器不是一个好的解决方案,因为表所有者可以删除触发器。

答案 1 :(得分:0)

尽管我找到了解决方案,但我使用的是ddl_command_end而不是ddl_command_start。

0