PostgreSQL: изменить все таблицы, возвращаемые запросом выбора - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть этот запрос на postgres 11,2 дБ:

SELECT relname
FROM pg_stat_user_tables
WHERE n_mod_since_analyze=0 AND relname LIKE '%' 
    AND relname NOT IN (SELECT relname FROM pg_class WHERE  array_length(reloptions,1)>0);

, который возвращает список таблиц, для которых мне нужно отключить автоочистку. Я пытаюсь найти способ запустить ALTER TABLE pg_stat_user_tables.relname SET (autovacuum_enabled = false); для всех таблиц, возвращаемых моим оператором запроса. Google продолжает возвращать меня к изменению столбцов таблицы. Можно ли просто взять имена таблиц, возвращенные этим запросом, и передать их в ALTER TABLE?

1 Ответ

1 голос
/ 08 апреля 2020

Попробуйте с psql CLI и \ gexe c внутренней командой:

SELECT format('ALTER TABLE %s SET (autovacuum_enabled = false);',lt.relname)
FROM
(
 SELECT relname
 FROM pg_stat_user_tables
 WHERE n_mod_since_analyze=0 
 AND relname LIKE '%' 
 AND relname NOT IN (SELECT relname FROM pg_class WHERE  array_length(reloptions,1)>0)
) lt;
\gexec

Выход выполнения:

ALTER TABLE p SET (autovacuum_enabled = false);
ALTER TABLE
ALTER TABLE t1 SET (autovacuum_enabled = false);
ALTER TABLE
ALTER TABLE t2 SET (autovacuum_enabled = false);
ALTER TABLE
...