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
我在 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