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;