我想将所有权限授予数据库中的每个表sql如下:
CREATE OR REPLACE FUNCTION test()
RETURNS void
AS $$
DECLARE
tb RECORD;
sql1 TEXT;
BEGIN
FOR tb IN (select tablename from pg_tables where schemaname='public')
LOOP
sql1 := 'GRANT ALL ON table ' || tb.tablename || ' TO tmp_admin';
EXECUTE sql1;
--RAISE NOTICE '%s', sql1;
END LOOP;
END
$$ LANGUAGE PLPGSQL;
select * FROM test();
当我发出通知时,它可以正常输出我想要的sql但是这个sql总是有效的
但是这个sql总是影响
我不知道这意味着什么。大概你的意思是它没有做正确的事情,否则你就没有问题要问了。
正如马所提到的,你根本不需要用函数来使它复杂化。但不管怎样,只要你的表名不需要双引号,它对我来说确实有效。为了避免这个问题,应该使用FORMAT()
而不是||
来构造字符串。
如果你有错误,你会得到什么错误?如果你认为它无声地没有效果,你做了什么来推断它没有效果?