我想知道在创建表时是否可以执行PostgreSQL系统表上的触发器
我需要在我的数据库的每个表上添加2个函数,我想动态地执行它
谢谢
我正在尝试跟踪用户创建.我在许多帖子中查看了DDL触发器,但这些似乎只是跟踪对象,而不是用户.有没有办法跟踪/记录在SQL Server中创建或删除用户的时间?
我想做一些概念上简单的事情,但在现实中似乎要复杂得多.
基本上,每当为我们数据库中的几个用户创建一个新表时,我想授予一个角色的选择权限.基本上这个:
grant select on TABLENAME to READROLE;
到目前为止,我的触发器看起来像这样:
创建或替换触发器osmm_grant_on_creation
在OSMM.SCHEMA上创建之后
开始
Run Code Online (Sandbox Code Playgroud)//grant goes here结束
问题是,我无法弄清楚如何通过获取新创建的表的名称并通过触发器将其引用到授权来将两者连接在一起.有什么建议?谢谢.
我想用ddl触发器(在放置之前)创建一个备份表,并遇到以下问题.
发生第一次丢弃时没关系:a_backup表包含丢弃表的数据.但为什么我不能放弃另一张桌子?
ORA-01031:权限不足
create table b (x number);
Run Code Online (Sandbox Code Playgroud)
- 表B已创建.
create table a (x number);
Run Code Online (Sandbox Code Playgroud)
- 表A已创建.
create table a_backup as select * from a where 1 = 0;
Run Code Online (Sandbox Code Playgroud)
- 表A_BACKUP已创建.
create or replace trigger a_backup_tr
before drop
on database
begin
IF ora_dict_obj_name <> 'A' then
null;
ELSIF ora_dict_obj_name = 'A'
and ora_dict_obj_owner = 'TRANEE' then
insert into a_backup
select * from a;
ELSE null;
end if;
end;
/
Run Code Online (Sandbox Code Playgroud)
- 触发A_BACKUP_TR编译
-- 1
drop table a;
Run Code Online (Sandbox Code Playgroud)
- 表A下降.
-- 2 …Run Code Online (Sandbox Code Playgroud)