postgresql如何禁止在数据库执行drop table操作

Posted 瀚高PG实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgresql如何禁止在数据库执行drop table操作相关的知识,希望对你有一定的参考价值。

作者:瀚高PG实验室 (Highgo PG Lab)- 徐云鹤
PG如何禁止在数据库执行drop table的操作?
创建触发器函数:

CREATE OR REPLACE FUNCTION DISABLE_DROP_TABLE()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
BEGIN
    if tg_tag = 'DROP TABLE'  THEN
        RAISE EXCEPTION 'Command % is disabled.', tg_tag;
    END if;
END;
$$;

创建事件触发器:

CREATE EVENT TRIGGER DISABLE_DROP_TABLE on  ddl_command_start  EXECUTE FUNCTION DISABLE_DROP_TABLE();

尝试执行drop table 命令报错:

postgres=# drop table aab;
ERROR:  Command DROP TABLE is disabled.
CONTEXT:  PL/pgSQL function disable_drop_table() line 4 at RAISE

其他操作也可通过类似方式进行限制。
更多的事件类型可查阅:

https://www.postgresql.org/docs/13/event-triggers.html

以上是关于postgresql如何禁止在数据库执行drop table操作的主要内容,如果未能解决你的问题,请参考以下文章

循环中的PostgreSQL DROP TABLE失败,出现ERROR:共享内存

如何在 PostgreSQL 的 DROP/CREATE/INSERT 语句中简洁地使用 SET 变量?

在 PostgreSQL 中进行 DROPping 时避免对引用表的独占访问锁

PostgreSQL:为啥 DROP DATABASE databaseName 在 psql 中保留已删除数据库的模式和关系?

Postgresql DROP TABLE 不起作用

Greenplum(PostgreSql)函数实现批量删除表