pgsql EXECUTE sql在9.6版中无效



我想将所有权限授予数据库中的每个表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()而不是||来构造字符串。

如果你有错误,你会得到什么错误?如果你认为它无声地没有效果,你做了什么来推断它没有效果?

最新更新