Sql 如何使用数据(而不是标识符)授予postgres权限

Sql 如何使用数据(而不是标识符)授予postgres权限,sql,postgresql,plpgsql,grant,postgresql-9.6,Sql,Postgresql,Plpgsql,Grant,Postgresql 9.6,我想使用以下函数(作为表插入的触发器): 我得到一个错误: ERROR: syntax error at or near "." LINE 3: GRANT ALL ON DATABASE testdb TO NEW.username; 因为New.username是值,而不是标识符 我如何才能实现这个GRANT?语法: CREATE OR REPLACE FUNCTION insert_authid_fn() RETURNS trigger AS $$ BEGIN execute

我想使用以下函数(作为表插入的触发器):

我得到一个错误:

ERROR:  syntax error at or near "."
LINE 3:   GRANT ALL ON DATABASE testdb TO NEW.username;
因为
New.username
是值,而不是标识符

我如何才能实现这个
GRANT

语法:

CREATE OR REPLACE FUNCTION insert_authid_fn() RETURNS trigger AS $$
BEGIN
  execute format ('GRANT ALL ON DATABASE testdb TO %I',NEW.username);
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

但总的来说,我怀疑这是个好主意

仅仅是动态的?。@VaoTsun你能详细说明一下吗?如何在函数中动态执行此操作?当然。用工作代码回答。谢谢你的回答。
CREATE OR REPLACE FUNCTION insert_authid_fn() RETURNS trigger AS $$
BEGIN
  execute format ('GRANT ALL ON DATABASE testdb TO %I',NEW.username);
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;