Использовать переменную в цикле postgres - PullRequest
0 голосов
/ 14 июля 2020

У меня проблемы при использовании переменной arrow в моем l oop. Postgres игнорирует объявленную переменную и читает ее как текст. Как я могу это решить?

У меня следующая ошибка: ERROR: relation "arrow" does not exist Where: SQL statement "GRANT SELECT ON arrow TO test" PL/pgSQL function inline_code_block line 8 at SQL statement

do $$
declare
    arrow record;
BEGIN
FOR arrow IN
    SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'
LOOP
   GRANT SELECT ON arrow TO test;
END LOOP;
END;
$$ LANGUAGE plpgsql;

1 Ответ

1 голос
/ 14 июля 2020

Для этого вам понадобится динамика c SQL.

do $$
declare
    arrow record;
BEGIN
FOR arrow IN
    SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'
LOOP
   execute format('GRANT SELECT ON %I TO test', arrow.table_name);
END LOOP;
END;
$$ LANGUAGE plpgsql;

Но вы можете сделать это намного проще без каких-либо циклов или PL / pg SQL:

grant select on all tables in schema public to test;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...