pg sql EXECUTE sql не действует в версии 9.6 - PullRequest
0 голосов
/ 07 августа 2020

Я хочу предоставить все привилегии для каждой таблицы в базе данных。 sql следующим образом 100

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 всегда действует。

1 Ответ

0 голосов
/ 07 августа 2020

но это sql всегда действует

Я не знаю, что это значит. По-видимому, вы имеете в виду, что он не работает правильно, иначе у вас не было бы вопросов.

Как упомянула лошадь, вам вообще не нужно усложнять это функцией. Но, тем не менее, для меня это работает, если имена ваших таблиц не нужно заключать в двойные кавычки. Чтобы избежать этой проблемы, для построения строки следует использовать FORMAT(), а не ||.

Если вы получите сообщение об ошибке, какую ошибку вы получите? Если вы думаете, что это молчаливо не действует, что вы сделали, чтобы сделать вывод об отсутствии эффекта?

...