PostgreSQL:更改 select 查询返回的所有表

PostgreSQL: Alter all tables returned by a select query

我在 postgres 11.2 db 上有这个查询 运行ning:

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);

那 returns 个 table 的列表,我需要为其禁用 autovacuum。我正在尝试想出一种方法来对我的查询语句返回的所有 table 进行 运行 ALTER TABLE pg_stat_user_tables.relname SET (autovacuum_enabled = false);。谷歌搜索让我回到更改 table 列。是否可以仅获取从此查询返回的 table 名称并将其传递给 ALTER TABLE?

尝试使用 psql CLI 和 \gexec 内部命令:

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